web-dev-qa-db-ja.com

Laravel 5構成-環境とオーバーライド

新しくインストールしました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ディレクトリ内に保存すべきではありませんか?しかし、そうでない場合は、どこに保管する必要がありますか?バグなのか機能なのかわからないので、もっと知っている人がいたら手がかりを教えてください。

12

Laravel dev(5.0)のドキュメントには、構成がカスケードされるという情報がありますが、それは真実ではありません。約2週間前にテストしましたが、現時点では、異なる値を持つ唯一の方法のようです。 for environmentは、現在の環境のカスタム値を配置するENVファイルを使用しています。ディレクトリへの設定の配置は、以前のように機能しませんが、変更される可能性があるか、過去2週間ですでに変更されている可能性があります。

13

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

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

7
An Phan

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

'default' => $app->environment()=='testing'?'sqlite':'mysql',
3
Margus Pala

Laravel 5環境を構成するのは簡単です。

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

編集済み;

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

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

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

0
user3851143