新しくインストールしましたLaravel 5コピー。
私のdetectEnvironment関数は次のように定義されています。
_$app->detectEnvironment(function()
{
return 'local';
return getenv('APP_ENV') ?: 'production';
});
_
_config\local
_に_database.php
_ファイルを作成しました:
_<?php
return [
'nothing' => 'new',
];
_
_php artisan clear-compiled
_を実行します。
index
の私のWelcomeController
メソッドは次のように定義されています。
_public function index(Application $app)
{
echo $app->environment();
var_dump($app['config']['database']);
//echo $app['config']['database'];
return view('welcome');
}
_
アプリケーションは次のようにインポートされました:_use Illuminate\Foundation\Application;
_
私が得る結果は次のとおりです。
_local array(1) { ["nothing"]=> string(3) "new" }
_
一方、Laravelは、構成ファイルを本番ファイル(デフォルトの_config\database.php
_ファイル)にカスケードすることを期待します。
奇妙なことに、_return 'local';
_行をコメントしても_php artisan clear-compiled
_が再度実行されます。
_production array(1) { ["nothing"]=> string(3) "new" }
_
したがって、常に_database.php
_ファイルの内容(これはローカルフォルダーからのもの)をロードし、メインの_database.php
_ファイルをオーバーライドするようです。このファイル名をたとえば_aaa.php
_に変更すると、再び正常に機能します。
それはバグですか、それとも環境構成をconfig
ディレクトリ内に保存すべきではありませんか?しかし、そうでない場合は、どこに保管する必要がありますか?バグなのか機能なのかわからないので、もっと知っている人がいたら手がかりを教えてください。
Laravel dev(5.0)のドキュメントには、構成がカスケードされるという情報がありますが、それは真実ではありません。約2週間前にテストしましたが、現時点では、異なる値を持つ唯一の方法のようです。 for environmentは、現在の環境のカスタム値を配置するENVファイルを使用しています。ディレクトリへの設定の配置は、以前のように機能しませんが、変更される可能性があるか、過去2週間ですでに変更されている可能性があります。
パッケージ があり、カスケード構成システムをLaravel 5に戻します。
免責事項:私は著者です。
私にとっては、Laravel 5devブランチの欠陥のように見えます。手動の環境検出と構成を追加することで回避できました。このコードはそれを行います。
'default' => $app->environment()=='testing'?'sqlite':'mysql',
Laravel 5環境を構成するのは簡単です。
開発者から彼のgithubリポジトリreadme.mdファイルで引用します。
phpdotenvは開発環境向けに作成されており、通常、本番環境では使用しないでください。本番環境では、実際の環境変数を設定して、リクエストごとに.envファイルをロードするオーバーヘッドが発生しないようにする必要があります。これは、Vagrant、chef、Puppetなどのツールを使用した自動展開プロセスを介して実現することも、PagodaboxやHerokuなどのクラウドホストを使用して手動で設定することもできます。
したがって、マシンごとに「.env」ファイルを作成する必要があり、本番サーバーでは「.env」ファイルを使用しないでください。