更改Laravel 4中的默认环境

时间:2013-12-18 22:09:12

标签: php laravel laravel-4

在Laravel 4中,默认配置环境是“生产”。这意味着如果您运行没有--env选项的artisan命令,它将采用生产配置。这可以在\Illuminate\Foundation\Application::detectWebEnvironment()中看到,detectConsoleEnvironment()在未设置--env选项时由{{1}}调用。

此行为已成为我的开发环境的风险。很容易忘记--env选项,比如无意中在生产数据库上运行迁移。 (是的,发生了这件事,但幸运的是,这是一个小小的改变。)我接近将生产环境配置重命名为“实际生产”,但似乎应该有一个更优雅的解决方案。

TL; DR

如何更改Laravel 4中的默认环境,以便默认情况下artisan命令不会在生产中运行?

6 个答案:

答案 0 :(得分:12)

感谢安东尼奥提示我重新考虑域名检测。

$env = $app->detectEnvironment(array(
(
    // Empty string is to set development as the default environment for 
    // artisan commands.
    'development' => array('dev.foo.com', ''),
    'test' => array('test.foo.com'),
    'production' => array('www.foo.com', 'foo.com'),
));

添加''作为开发域有效地将开发设置为工匠命令的默认环境,可能是因为从命令行调用应用程序时域名为空。我测试了,似乎任何== false都可以。我还证实这不会干扰生产或测试环境的检测。

答案 1 :(得分:10)

在bootstrap / start.php中,您可以设置环境:

$env = $app->detectEnvironment(function()
{

    return 'development';

});

但你可以做很多事情:

$env = $app->detectEnvironment(array(

    'local' => array('your-machine-name'),

));

$env = $app->detectEnvironment(function()
{
    return $_SERVER['MY_LARAVEL_ENV'];
});

答案 2 :(得分:3)

您可以尝试修改app / start.php文件,将所需环境中的第二个参数添加为 TRUE ,即  启用本地环境看起来像

$env = $app->detectEnvironment(array(

    'local' => array('homestead',true),

));

答案 3 :(得分:2)

我发现的最优雅的解决方案之一是来自这篇博文: http://stevegrunwell.com/blog/laravel-application-environment/

优点:

  1. 无需将开发机器阵列硬编码到git提交文件start.php中。
  2. 回退到生产中的服务器环境变量。
  3. 通过修改environment.php文件轻松保留本地开发环境。

答案 4 :(得分:1)

$env = $app->detectEnvironment(array(

      'staging' => array('baichebao_test'),
      'local' => array('*.local', '*'),
 ));

就像我的例子一样,将默认环境放在数组的最后一项,并在其管理员主机名中添加“*”。它适用于laravel 4.X

答案 5 :(得分:0)

在Laravel 4.2中,如果没有提示,您将无法进行破坏性的工匠迁移:

  

破坏性迁移操作现在需要在生产中运行时进行确认或--force。

Change log for 4.2 is here