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文件。当我将此文件名更改为 example 时,它​​再次正常工作aaa.php

它是一个错误还是环境配置不应该存储在config目录中?但如果不是,它们应该存放在哪里?我不知道这是一个错误还是一个功能,所以如果有人知道更多关于它的信息,请给我一个线索。

4

4 回答 4

13

尽管在 Laravel dev (5.0) 的文档中,有信息表明配置会级联,但事实并非如此。我大约在 2 周前对其进行了测试,目前看来,为环境设置不同值的唯一方法是使用 ENV 文件,在其中为当前环境放置自定义值。将设置放入目录将无法像以前那样工作,但它可能会改变,或者可能在过去 2 周内已经改变。

于 2014-12-21T18:34:07.597 回答
7

有一个可以将级联配置系统带回 Laravel 5。

免责声明:我是作者。

于 2015-02-24T01:03:44.793 回答
3

对我来说,这看起来像是 Laravel 5 开发分支中的缺陷。我能够通过添加手动环境检测和配置来解决问题。这段代码做到了。

'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 回答