Laravel 4.2提示我的应用程序处于生产模式,如何关闭?

28

我刚安装了 Laravel。当运行php artisan migrate:refresh时,我收到一条信息,上面写着:Application In Production! Do you really wish to run this command?'

我知道这是4.2的更新,但我不知道如何关闭它。

我在源代码中找到它来自Illuminate\Console\ConfirmableTrait,并且只有当此测试通过时才会运行: if ($this->getLaravel()->environment() == 'production')

我不确定为什么它认为我在生产环境中。我没有设置任何环境。这是默认的环境检测,我目前仍在使用它。

$env = $app->detectEnvironment(array(

    'local' => array('homestead')

));

另外,如果我将生产环境设置为不是我的机器的主机名,我仍然会遇到同样的问题。


2
对于 Vagrant 用户来说,主机名不是你的个人电脑,而是虚拟机器,例如:vagrant-ubuntu-trusty-64。我通过运行 echo gethostname(); die; 命令找到了它。 - Dariux
5个回答

32
只需为与特定环境匹配的主机指定一个机器名称,然后 laravel 将自动检测环境(默认为production),例如:
$env = $app->detectEnvironment(array(

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

    'local' => array('*.dev', gethostname()),
    'production' => array('*.com', '*.net', 'www.somedomain.com')
));

阅读文档,以及这个答案


1
好的,问题已经解决了。谢谢。不过需要说明的是,我把“local”改成了“development”(在我的情况下两者是一样的),因为我遇到了一个“access denied 'homestead'@'localhost'”错误,这很奇怪,因为我的用户是root,而不是homestead。 - Brennan Hoeting
@surfer190,bootstrap/start.php,更多详细信息请参见这里 - The Alpha
1
在 Lumen 中,可以在 bootstrap\app.php 文件中启用 Dotenv::load(__DIR__.'/../'); - Brent Connor
这是我在 Travis CI 中遇到的问题。 我既没有权限也不具备更改机器名称的能力。 在这种情况下,我该怎么办? - IIllIIll

13

将您的环境设置为除生产环境以外的其他环境是正确的方法。 请参见被接受的答案。

但是,如果您正在寻找快速修复,则可以在UNIXoid环境中使用以下方法:

yes | php artisan migrate:refresh

这样做只是向程序发送一串“y”的流,就像在提示时按下了“y”键。

我发现这比使用--force要好一些,因为并不是所有的工匠命令都支持force选项。


@Arcrammer 好奇,我想知道为什么会这样。无论如何,请尝试运行以下代码:$app->detectEnvironment(); $env = getenv('ENV') ?: 'production'; 然后使用此命令行:ENV=local php artisan migrate:refresh。基本点是L4.2要求您调用detectEnvironment,但之后您可以将$env设置为任何您喜欢的内容。 - bishop
我没有这个问题。我只是路过!哈哈,谢谢。 - IIllIIll
更新:Artisan有一个--env标志,允许您设置首选环境。我可以再次确认,管道yes会取消命令,尽管还有一个-n标志(代表“无交互”),使用它可以防止Artisan要求确认。此外,我正在为这个特定的应用程序使用Laravel 5+。 - IIllIIll
另一个更新:我收回之前的说法!我本来以为可以运行,但现在不行了。不过,你可以传递 --force 参数,这将在不需要确认的情况下运行迁移。请参见:https://github.com/laravel/framework/issues/4753#issuecomment-46433295 - IIllIIll

5

如果有人在搜索类似问题的 Lumen 安装过程中遇到此问题,建议检查 .env 文件,并添加 APP_ENV=local 如果尚未存在。这解决了我的问题。


1
希望这能帮助其他人。我突然遇到了一个问题,我的开发网站停止连接到数据库,提示如下:
PDOException SQLSTATE[HY000] [1049] Unknown database 'forge' failed

当我尝试运行artisan migrate:refresh等命令时,我也遇到了诸如OP之类的错误,错误提示我处于生产环境等等。

经过长时间的头脑风暴(!)后,我发现我的 /bootstrap/start.php 中设置的主机名值是错误的,因为我的MacBook Pro上的主机名已经改变了?! 我不知道它是怎么变成类似于RobMacbookPro.local这样的东西的。这意味着它会回退到生产环境,从而加载了不正确的 database.php 文件和标准的DB=forge(这是错误的)

请查看此指南: http://laravel.com/docs/4.2/configuration

特别注意以下代码:

<?php

$env = $app->detectEnvironment(array(

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

));

在Mac和可能的Linux系统上,你可以通过在终端中键入# hostname来确定你的主机名。
希望这能帮助某些人节省时间!

0
我不知道它是否适用于Laravel 4.2。
但在我的情况下,--force 对我有帮助。
php artisan migrate --force

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接