【Laravel 8】キャッシュ後に .env が反映されない
Skrumエンジニアの根岸です。
とあるプロジェクトで Laravel 6 を Laravel 9 にアップグレードしました。
ステージングサーバでステージング環境用の.env
ファイルを作成し、環境変数を変更しました。
cp .env.staging .env
APP_NAME=Laravel-staging // Laravelから変更
APP_ENV=staging // localから変更
// その他の環境変数もステージング環境用のものを設定
この状態でコンフィグキャッシュコマンドを実行。
php artisan config:cache
このLaravelアプリケーションのURLにアクセスするとエラーが発生していました。
コンフィグが正しく反映されていないことが原因のようだったので、bootsrap/cache/config.php
を確認してみると、APP_NAME
はLaravel
、APP_ENV
はlocal
、APP_KEY
は空になっていました。つまり、.env
ではなく、なぜか.env.staging
がキャッシュされてしまっているようでした。
Laravel 6 で運用している時は、このようなことは発生したことがなかったので、Laravel のドキュメントを確認してみると、やはりこの部分の仕様が Laravel 8 で変更されていました。
追加の環境ファイル
アプリケーションの環境変数を読み込む前に、Laravelは
https://readouble.com/laravel/9.x/ja/configuration.html#additional-environment-filesAPP_ENV
環境変数が外部から提供されているか、もしくは--env
CLI引数が指定されているかを判断します。その場合、Laravelは.env.[APP_ENV]
ファイルが存在すれば、それを読み込もうとします。存在しない場合は、デフォルトの.env
ファイルを読み込みます。
挙動を見るに、「APP_ENV
環境変数が外部から提供されている」の「外部」というのは、.env
のAPP_ENV
も含んでいるようでした。
つまり、.env
のAPP_ENV
にstaging
と定義されていたため、.env.staging
をキャッシュした、ということのようです。
実際、.env.staging
を.env.staging_
にファイル名変更したところ、.env
に定義されている環境変数が正しくキャッシュされました。