我是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
环境中运行。