Laravel没有检测到环境正确

时间:2014-09-24 11:07:43

标签: php laravel-4 development-environment database-migration

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

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

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

    'local' => array('ΛΥΚΟΣ-PC'),

));

但似乎没有效果。所以我按照Environment Configuration上的说明操作并执行了以下操作

$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'到数据库'锻造'。

嗯,我想这个问题与环境配置有关。任何想法如何解决它?

2 个答案:

答案 0 :(得分:0)

$_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

但我建议您按顺序安排环境,让一切变得更轻松。并且减少了制作麻烦的可能性。

答案 1 :(得分:0)

最佳做法是在使用artisan命令时始终明确包含环境。你可以这样做:

php artisan migrate --env=local

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