.envを以下のように管理しているとする。
.env.develop // 開発 .env.staging // 検証 .env.production // 本番
.htaccessにSetEnvIfで各環境で読み込む.envを制御している。
SetEnvIf Host "xxx.net" APP_ENV=production SetEnvIf Host "xxx-stg.net" APP_ENV=staging SetEnvIf Host "xxx-dev.net" APP_ENV=develop
開発環境の.envには何も定義されていない。
この状態の開発環境で下記を実行した。
$ php artisan config:cache
あれ・・・急に開発環境つながらないんだけど・・・と。
(開発者が共有して使っているので、迷惑をかけてしまいました・・・)
理由は単純で、.envのDB接続情報をもとにconfigをキャッシュしてしまったことが原因でした。
つまり、.envは以下のような状態なので、これをキャッシュしていた訳です。
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=root DB_PASSWORD=
ちなみに、artisanコマンドでは、.env.developを指定して実行することも可能です。
$ php artisan -env=develop config:cache
こうすれば、できますね。
余談ですが、
config:cacheするとenv()は、nullを返すので気を付けましょう。