Laravel で本番環境と開発環境を使い分けたいときに、.envの値を取得する場合があると思います。
私の場合は本番環境のみGoogle Analyticsのコードを仕込みたかったので、if文で本番環境か開発環境かどうかを判定する必要がありました。
イメージはこんな感じです。
<head>
〜略〜
@if(本番環境ならば)
<script>Google Analyticsのスクリプト</script>
@endif
</head>
〜略〜
〜略〜
@if(本番環境ならば)
<script>Google Analyticsのスクリプト</script>
@endif
</head>
〜略〜
※bladeファイルです
【問題発生】Webアプリをデプロイしたが、アナリティクスが機能していない。。
MusicStore Reviewsという楽器店のレビューサイトを公開した際、Google Analyticsのコードを仕込んだのですが、アクセス数が数日連続で0だったため、これはオカシイと思い今回の問題が発覚しました。
.envファイルの値の取得方法
結論から言うと正しい.envファイルの値の取得方法は以下です。
config('app.env')
※config/app.phpの'env'の値を取得する場合
※config/app.phpの'env'の値を取得する場合
.envファイルに直接アクセスする env('APP_ENV') という書き方は良くないです。
理由は、設定ファイルがキャッシュされている場合、env関数がnullを返すためです(envファイルを読み込まなくなる)。
本番環境ではキャッシュを保存するため、env(変数名)を使ってしまうとnullとなりエラーの原因となります。
※今回Google Analyticsのコードが読み込まれなかったのはif文の条件式で env('APP_ENV') を使用しており値がnullとなっていたためだった。。
configディレクトリ以下のファイル(この場合config/app.php)に、
'env' => env('APP_ENV', 'production')
のような書き方をして、その他の場所(bladeファイルやコントローラーなど)では
config('app.env')
のようにconfig('ファイル名.変数名')でアクセスしましょう。
本番環境のみ適用させたい場合は、
<head>
〜略〜
@if(config('app.env') === 'production')
<script>Google Analyticsのスクリプト</script>
@endif
</head>
〜略〜
〜略〜
@if(config('app.env') === 'production')
<script>Google Analyticsのスクリプト</script>
@endif
</head>
〜略〜
このように書きます。
コメント