見出し画像

CakePHP4をHerokuにデプロイするときのエラーおよび問題とそのメモ

CakePHP4をHerokuにデプロイすると以下のような問題が発生したので、解決策をメモする。

・ DebugKitが見つからないと怒られる
・デフォルトのapp_local.phpが読まれてDBにつながらないなど諸々不都合が生じる

DebugKitが見つからない

The application is trying to load a file from the DebugKit plugin.

挨拶代わりに、DebugKitが無いと怒られる。

画像1

これは、herokuがbuildする際に`composer install --no-dev`という感じでrequire-devについてはインストールしない設定でcomposerが走るから生じる。以下のコマンドでdebug_kitをrequireに移動させる。

$ composer require cakephp/debug_kit

これでcomposer.jsonおよびcomposer.lockが修正されるので、あらためてDeployすれば良い。

デフォルトのapp_local.phpが読まれる

config/app_local.phpが存在すると、config/app.phpの内容を上書きしてしまうが、herokuでデプロイする度にデフォルトのconfig/app_local.phpが生成されてしまう。

config/app_local.phpはgitなどのバージョン管理外に置くことを推奨されているため、これを編集してpushすることは推奨されない。

なので、config/bootstrap.phpを修正してapp_local.phpをloadしないようにした。

// Configure::load('app_local', 'default');

こうして該当部分をコメントアウトするだけでも良いが、そうすると今度は本当にローカルで開発しているときに困るので、環境変数でスイッチするようにした。

if (file_exists(CONFIG . 'app_local.php') && env('CAKE_ENV') !== 'heroku') {
   Configure::load('app_local', 'default');
}

そして、HerokuのSettingsのConfig VarsよりCAKE_ENVにherokuをセットすることで問題に対応した。

画像2

CakePHP4のドキュメントやソースをあまり深く読めていないので、これ以外により良いスマートな解法があるかもしれない……。

いいなと思ったら応援しよう!