在Laravel 4中,默认配置环境是“生产”。这意味着如果您运行没有--env
选项的artisan命令,它将采用生产配置。这可以在\Illuminate\Foundation\Application::detectWebEnvironment()
中看到,detectConsoleEnvironment()
在未设置--env
选项时由{{1}}调用。
此行为已成为我的开发环境的风险。很容易忘记--env选项,比如无意中在生产数据库上运行迁移。 (是的,发生了这件事,但幸运的是,这是一个小小的改变。)我接近将生产环境配置重命名为“实际生产”,但似乎应该有一个更优雅的解决方案。
TL; DR
如何更改Laravel 4中的默认环境,以便默认情况下artisan命令不会在生产中运行?
答案 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/
优点:
start.php
中。 environment.php
文件轻松保留本地开发环境。答案 4 :(得分:1)
$env = $app->detectEnvironment(array(
'staging' => array('baichebao_test'),
'local' => array('*.local', '*'),
));
就像我的例子一样,将默认环境放在数组的最后一项,并在其管理员主机名中添加“*”。它适用于laravel 4.X
答案 5 :(得分:0)