laravel 4で:
$env = $app->detectEnvironment(array(
'local' => array('Homestead')
));
デフォルトで。
ただし、laravel 5では、次のように変更されます。
$env = $app->detectEnvironment(function()
{
return getenv('APP_ENV') ?: 'production';
});
また、.gitignoreの。env。*行を除外しました。
.env
そして、ファイル.env.exampleを追加しました:
APP_ENV=local
APP_KEY=SomeRandomString
DB_USERNAME=Homestead
DB_PASSWORD=Homestead
したがって、2つ以上の環境がある場合、それらをすべて単一の.envファイルに設定する必要がありますか?例えば。:
APP_ENV=local
DB_PASSWORD=123
APP_ENV=alpha
DB_PASSWORD=456
.envファイルがない場合、laravelはどの環境を使用しているかを知ることができますか?
Laravel 4:と同じように行うことができます。
$env = $app->detectEnvironment(array(
'local' => array('Homestead')
));
*.env
ファイルは、VCSに入れるべきではない機密データを入れるためにのみ使用されます。同じことはLaravel 4
しかし、最後の日にデフォルトのdetectEnvironmentが次のように変更されたようです:
$env = $app->detectEnvironment(function()
{
return getenv('APP_ENV') ?: 'production';
});
そのため、PC名またはENVファイルから設定変数を使用できます。
メインenvファイルでENVベースの環境検出を使用する場合(デフォルトでは.env
ファイルを追加する必要があります:
APP_ENV=local
もちろんlocal
はローカル環境です。これをproduction
またはdev
に変更できます
現時点で私が見る最も重要な問題は、この.env
ファイルの内容をAPP_ENV=local
からAPP_ENV=production
に変更するために本番に行くときに覚えておく必要があるということです。 PC名に基づく古いデフォルトの方法。
現在、ENVファイル。 ENVベースの環境検出を使用する場合は、ENVファイルのみに含める必要があります。
APP_ENV=local
これで、たとえば、さまざまな環境用に個別のENVファイルを作成できます。
。local.env:
MY_DB=testdb
。production.env:
MY_DB=productiondb
そして今bootstrap.environment.php
ファイルで変更できます:
if (file_exists(__DIR__.'/../.env'))
{
Dotenv::load(__DIR__.'/../');
}
に:
if (file_exists(__DIR__.'/../.env'))
{
Dotenv::load(__DIR__.'/../');
if (getenv('APP_ENV') && file_exists(__DIR__.'/../.' .getenv('APP_ENV') .'.env')) {
Dotenv::load(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env');
}
}
メインenvファイルからAPP_ENV
に基づいて追加のenvファイルをロードします。
これで、他の構成ファイルでいつものように使用できます:$_ENV['MY_DB']
5.2にアップグレードしたばかりの場合:
静的Dotenv::load()
メソッドを使用することはできなくなりました。代わりに次を使用してください。
$dotenv = new Dotenv\Dotenv(__DIR__ . '/../', '.' . getenv('APP_ENV') . '.env'); // Laravel 5.2
$dotenv->load();
bootstrap/app.php
で。
// Sooを編集します。過去1時間これを掘り下げた後、ここに追加情報を追加することもできます。
env()
ヘルパー関数を介して、またはPHPのネイティブgetenv()
関数を介して直接アクセスできます。 これらはキャッシュ可能 であるため、設定ファイル(/config/*.php
を参照)を満たすためにのみ行うべきです。(new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
に注意してください: load()
を使用しているため、すでに設定されている環境値は上書きされません!(そうするためにoverload()
を使用する必要があります-これは私を運転しましたナッツ Homesteadがphp-fpm構成APP_ENV
で/etc/php/7.0/fpm/php-fpm.conf
変数をlocal
に設定するため.envファイルで変更することはできません)TestCase
から継承します。これはAPP_ENV
変数をテストに設定します( refreshApplication()
-を使用してputenv()
はデフォルトのlocal
値を上書きします)私はLaravel 5.1、これはわずかに単純な私見です。bootstrap/ app.phpでは、アプリケーションがインスタンス化された直後に)にソリューションを提供したかっただけです。
$app->beforeBootstrapping(\Illuminate\Foundation\Bootstrap\DetectEnvironment::class, function() use ($app) {
$suffix = (env('APP_ENV'))
? '.'.env('APP_ENV')
: '';
$app->loadEnvironmentFrom('.env'.$suffix);
});
チェックやエラー処理は必要ありません。 Laravelは、ファイルが見つからない場合、デフォルトで「プロダクション」になります。
以上です。
デフォルトで複数の.env
ファイルを持つことはできないという事実andは.gitignoreで除外されているため、意図的に環境を管理する方法です。 .env
ファイルはバージョン管理内になく、環境ごとに構成する必要があります。 .env
は、環境とすべての環境変数を設定します。
したがって、2つ以上の環境がある場合、それらをすべて単一の.envファイルに設定する必要がありますか?
いいえ。アプリケーションをインストールした各場所に.env
ファイルがあります。違いは、そのファイルの中にあるものです。
さらに、.env
ファイルは単にキーと値のストアであるため、後続の宣言は以前の宣言を上書きします。あなたの例では、Laravelはあなたの「ローカル」設定を見ることはないでしょう。
最初は奇妙に思えますが、この新しいデフォルトシステムは実際には一般に簡単であり、論理エラーの場所がないため、「4.2の方法」にあった問題が発生しにくくなります。
.envファイルがない場合、laravelはどの環境を使用しているかを知ることができますか?
まったく実行されません。 .env
ファイルではAPP_KEY
宣言もLaravelなしでは実行されません。.env
ファイルがなければ、500サーバーエラーが発生します。 。