12

新しい 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それはバグですか、それとも環境設定をディレクトリ内に保存すべきではないのでしょうか? しかし、そうでない場合、どこに保管する必要がありますか? バグなのか仕様なのかわからないので、詳しい方がいましたら教えてください。

4

4 に答える 4

7

カスケード構成システムを Laravel 5 に戻すパッケージがあります。

免責事項: 私は著者です。

于 2015-02-24T01:03:44.793 に答える
3

私にとっては、Laravel 5 dev ブランチの欠陥のようです。手動の環境検出と構成を追加することで回避できました。このコードはそれを行います。

'default' => $app->environment()=='testing'?'sqlite':'mysql',
于 2014-12-25T14:33:12.100 に答える
0

Laravel 5 環境を簡単に構成できます。

  1. ルート アプリケーション フォルダーを開き、「.env.example」を見つけます。
  2. 「.env」にコピーして名前を変更し、
  3. 「.env」ファイルを環境に合わせてください。
  4. GIT を使用する場合は、このファイルを GIT リポジトリにプッシュしないようにしてください。「完全な説明」のために、この構成をここに書きます。

編集;

彼の github リポジトリの readme.md ファイルで開発者から引用します。

phpdotenv は開発環境用に作成されており、通常は本番環境では使用しないでください。本番環境では、要求ごとに .env ファイルをロードするオーバーヘッドがないように、実際の環境変数を設定する必要があります。これは、Vagrant、chef、Puppet などのツールを使用した自動デプロイ プロセスによって実現できます。また、Pagodabox や Heroku などのクラウド ホストを使用して手動で設定することもできます。

したがって、マシンごとに「.env」ファイルを作成する必要があり、本番サーバーでは「.env」ファイルを使用しないでください。

于 2015-02-13T03:37:53.510 に答える