CakePHP4をHerokuにデプロイするときのエラーおよび問題とそのメモ
CakePHP4をHerokuにデプロイすると以下のような問題が発生したので、解決策をメモする。
・ DebugKitが見つからないと怒られる
・デフォルトのapp_local.phpが読まれてDBにつながらないなど諸々不都合が生じる
DebugKitが見つからない
The application is trying to load a file from the DebugKit plugin.
挨拶代わりに、DebugKitが無いと怒られる。
これは、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をセットすることで問題に対応した。
CakePHP4のドキュメントやソースをあまり深く読めていないので、これ以外により良いスマートな解法があるかもしれない……。