【问题标题】:Changing default environment in Laravel 4在 Laravel 4 中更改默认环境
【发布时间】:2014-01-07 07:11:04
【问题描述】:

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

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

TL;DR

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

【问题讨论】:

  • 我认为 [这个答案][1] 就是你要找的... [1]:stackoverflow.com/a/19739750/1272001
  • 我不知道你的设置,但一般来说,开发、登台和生产不应该能够访问彼此的环境变量,这意味着你所做的事情是不可能的。相反,将生产设置为默认设置会更安全,因为开发环境可能会泄露机密信息,例如错误消息。 Laravel 在这里有一些关于它的文档:laravel.com/docs/…

标签: php laravel laravel-4


【解决方案1】:

在 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'];
});

【讨论】:

  • 我知道这一点并使用第二种方法来匹配域。这实际上给了我一个好主意,而且……是的。设置 'development' => array('') 有效地将 'development' 设置为 artisan 的默认环境。我检查了,这不会干扰域的正常环境检测。
【解决方案2】:

感谢 Antonio 提示我重新考虑域检测。

$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 都可以。我还验证了这不会干扰生产或测试环境的检测。

【讨论】:

  • 自从 Laravel 4.1 发布以来,域检测不再可能用于决定环境,这意味着这个答案不再有效。 laravel.com/docs/upgrade#upgrade-4.1
  • 可以,只需要手动操作即可(反对使用detectEnvironment)。但不推荐这样做,因为其中一些 PHP 全局变量在某些情况下可能会被欺骗(取决于您的服务器配置)。使用hostname 对于我们这些运行在许多具有不同主机名的服务器(如EC2)上的人来说有点傻。
【解决方案3】:

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

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

Change log for 4.2 is here

【讨论】:

    【解决方案4】:

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

    优点:

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

    【讨论】:

      【解决方案5】:
      $env = $app->detectEnvironment(array(
      
            'staging' => array('baichebao_test'),
            'local' => array('*.local', '*'),
       ));
      

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

      【讨论】:

        【解决方案6】:

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

        $env = $app->detectEnvironment(array(
        
            'local' => array('homestead',true),
        
        ));
        

        【讨论】:

          猜你喜欢
          • 2016-06-05
          • 2015-04-10
          • 2018-07-11
          • 1970-01-01
          • 1970-01-01
          • 2019-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多