Laravel检测环境不正确


Laravel not detecting environemnt correct

我是Laravel的新手,我想得到一些帮助。

首先,我试图根据机器名称设置我的"开发"环境,所以我做了这个

die(gethostname()); // output the machine name, in my case is ΛΥΚΟΣ-PC
$env = $app->detectEnvironment(array(
    'local' => array('ΛΥΚΟΣ-PC'),
));

但似乎不起作用。因此,我按照环境配置的说明进行了以下

$env = $app->detectEnvironment(function(){
    switch ($_SERVER['HTTP_HOST']) {
        case 'localhost':
            return 'local';
        break;
        default:
            return 'production';
        break;
    }
});
die($env); // outputs 'local'

问题是,当我尝试进行一些迁移时,我输入了命令行:

$ php artisan migrate

为了创建表格,但我得到了这个

*******************************
*  Application in Production! *
*******************************
Do you really want to run this command?

如果我继续,我会得到"用户"@'localhost'对数据库'forge'的访问被拒绝"。

嗯,我想这个问题与环境配置有关。有什么办法吗?

$_SERVER['HTTP_HOST']解决方案不适用于Artisan的原因是$_SERVER['HTTP_HOST']变量仅在通过web服务器启动时可用。

'local' => array('ΛΥΚΟΣ-PC')应该工作,可能与特殊字符有关。

我根据laravel路径设置我的环境:

$env = $app->detectEnvironment(array(
    'local' => strpos(getcwd(), '/local')>-1,
    'staging' => strpos(getcwd(), '/staging')>-1,
));

因此,如果/local是路径的一部分,则将环境设置为本地注意:在Windows上,您可能需要将/替换为'

您也可以指定Artisan:的环境

php artisan migrate --env=local

但我建议你把你的环境整理好,让一切都变得更容易。而且扰乱生产的可能性更小。

使用artisan命令时,最好始终显式包含环境。你可以这样做:

php artisan migrate --env=local

这将确保该命令在local环境中运行。