Laravel 4.1部署-未识别Production.env.php

Laravel 4.1部署-未识别Production.env.php,laravel,laravel-4,environment-variables,production-environment,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' ]; $env = $app->detectEnviron

出于某种原因,我的制作laravel应用程序认为它在本地环境中

/var/www/appname/.env.php

<?php

return 
[
    'APP_ENV'   =>  'production',
    'DB_HOST'   =>  'HIDDEN',
    'DB_NAME'   =>  'HIDDEN',
    'DB_PASSWORD'   =>  'HIDDEN'
];
$env = $app->detectEnvironment(function()
{
    return getenv('APP_ENV') ?: 'local';
});
...
...
'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_',
    ),
...
...
/var/www/appname/app/config/database.php

<?php

return 
[
    'APP_ENV'   =>  'production',
    'DB_HOST'   =>  'HIDDEN',
    'DB_NAME'   =>  'HIDDEN',
    'DB_PASSWORD'   =>  'HIDDEN'
];
$env = $app->detectEnvironment(function()
{
    return getenv('APP_ENV') ?: 'local';
});
...
...
'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)

php工匠修补匠
然后
getenv('DB_NAME')

$ php artisan tinker
[1] > getenv('DB_NAME');
// false
因此,要么没有设置我的环境变量,要么Laravel没有识别生产环境的
.env.php
文件

更新

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

话虽如此,
.env.php
仍应用于存储数据库凭据和密钥等。。。但是我仍然有一个问题,因为当我尝试运行
getenv('DB_NAME')


有什么建议吗?

给所有想知道。。。为了解决这个问题,我在生产服务器上编辑了httpd.conf文件,如下所示:

SetEnv APP_ENV production
现在laravel知道该应用程序正在生产中

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

fastcgi_param APP_ENV production;

如果我错了,请纠正我,但我从未听说过Laravel自动处理
.env.php
进行环境检测?你确定文件包含在某个地方吗?@Quasdunk-和(你可能需要支付订阅费才能访问视频)。@Quasdunk-你还会看到
.env.php
.env.local.php
包含在默认的
.gitignore
文件中。感谢这些链接,我实际上没有意识到这一点!你活着,你学会了:)不幸的是,我不知道那会是什么问题。也许您可以检查文件权限,并确保
.env.php
可读,或者允许应用程序使用任何名称设置环境变量。这可能会有帮助(特别是关于
安全模式\u允许的\u环境变量的描述)
:laravel 4.1搞砸了。我有一点不同的问题。它检测到环境,但无法加载正确的配置文件。。。。(4.0.9使用相同的代码运行正常)laravel 4.0.*我们比这更好,4.1无法帮助您解决这一问题,因为我自己正在试图找出为什么黑客没有加载正确的文件。Gravy:您能告诉我们httpd.conf的位置吗?我在这里战斗了半天,战斗仍在继续…@SHANKAR-每个操作系统/设置都不同。我的是CentOS 5.5的
/usr/local/apache/conf
。在谷歌上搜索httpd.conf的位置,并将您的操作系统和版本包含在内,然后等待您的回复。我打开了LAMP,并且能够在不配置httd.conf文件的情况下解决它。我的问题是,我使用closer来定义env变量(getenv('env'))。后来我定义了数组,之后它就开始工作了。我只是为未来的访客写的。再次感谢。