Laravel 4.1部署 - 生产.env.php无法识别

时间:2014-03-02 10:59:21

标签: laravel laravel-4 environment-variables production-environment

出于某种原因,我的生产laravel应用程序认为它在当地环境中。

/var/www/appname/.env.php

<?php

return 
[
    'APP_ENV'   =>  'production',
    'DB_HOST'   =>  'HIDDEN',
    'DB_NAME'   =>  'HIDDEN',
    'DB_PASSWORD'   =>  'HIDDEN'
];

/var/www/appname/bootstrap/start.php

$env = $app->detectEnvironment(function()
{
    return getenv('APP_ENV') ?: 'local';
});

/var/www/appname/app/config/database.php

...
...
'mysql' => array(
        'driver'    => 'mysql',
        'host'      => getenv('DB_HOST'),
        'database'  => getenv('DB_NAME'),
        'username'  => getenv('DB_USERNAME'),
        'password'  => getenv('DB_PASSWORD'),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => 'lar_',
    ),
...
...

sudo php artisan env(通过SSH)

`Current application environment: local

php artisan tinker然后getenv('DB_NAME')

$ php artisan tinker
[1] > getenv('DB_NAME');
// false

因此,我的环境变量未被设置,或者Laravel没有识别生产环境的.env.php文件。

更新

在IRC的Anultro的帮助下,似乎还没有加载.env.php。因此,必须在laravel尝试检测环境之前设置APP_ENV。这是有道理的,因为在决定是否使用.env.php.env.local.php之前,Laravel需要知道正在运行的环境。

话虽如此,.env.php仍应用于存储数据库凭据和密钥等...但我仍然遇到问题,因为当我尝试运行{{1}时,应用仍然返回false }

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

对于所有想要了解的人......为了解决这个问题,我刚刚在生产服务器上编辑了我的httpd.conf文件,如下所示:

SetEnv APP_ENV production

现在,laravel知道应用正在投入使用。

如果您正在使用我现在已迁移我的网站的nginx,请添加以下内容,将脚本传递到活动网站中的FCGI服务器 - 可用/etc/nginx/sites-available/{sitename}

fastcgi_param APP_ENV production;