出于某种原因,我的生产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 }
有什么建议吗?
答案 0 :(得分:3)
对于所有想要了解的人......为了解决这个问题,我刚刚在生产服务器上编辑了我的httpd.conf文件,如下所示:
SetEnv APP_ENV production
现在,laravel知道应用正在投入使用。
如果您正在使用我现在已迁移我的网站的nginx,请添加以下内容,将脚本传递到活动网站中的FCGI服务器 - 可用/etc/nginx/sites-available/{sitename}
:
fastcgi_param APP_ENV production;