环境变量和工匠不在生产服务器上工作

时间:2014-08-29 13:10:43

标签: php apache laravel laravel-4 environment-variables

我正在使用Github将我的网站部署到我的生产服务器。因此,我不想存储.env。*。php文件,所以它们都在我的.gitignore中。

在每个环境目录中,我将数据库配置设置为使用getenv(),例如:

<?php

'connections' => array(

    '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'    => '',
    ),


),

);

然后我进入了我的虚拟主机的apache conf文件并设置了环境变量,如下所示:

SetEnv DB_HOST ***.***.***.***
SetEnv DB_NAME database
SetEnv DB_USERNAME databaseuser
SetEnv DB_PASSWORD databasepass

这一切都在生产服务器上完美运行。

但是,我现在只是手动导入数据库,而不是使用php artisan migrate,因为它不起作用。

我知道它不起作用,因为它没有达到apache所以变量没有被设置,但我已经尝试了很多方法来尝试解决这个问题,但我还没有运气

我尝试使用php artisan --env=production migrate

强制环境查看是否可以获取变量

我还尝试通过运行php artisan env检查它是否正在使用正确的环境,并且正在使用正确的生产环境。

我的下一个想法是在生产服务器上手动创建.env.production.php文件。我创建了一个并使用了getenv(),以防它像这样工作,但是发生了同样的错误,所以我尝试手动设置变量而不使用getenv(),我仍然没有运气。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

您应该使用laravel docs中描述的 .env.php 文件。

要在生产环境中设置环境变量,请在项目根目录中使用名为.env.php的文件:

<?php

# .env.php

return array(

    'DB_HOST' => 'localhost',
    'DB_NAME' => 'my_database',
    'DB_USER' => 'user_name',
    'DB_PASS' => 'super-secret-sauce',

);

对于不同的环境,您使用不同的.env文件。例如,在本地环境中,您将使用.env.local.php,而对于测试,您将使用.env.testing.php

运行migratedb:seed等工匠命令时,您可以使用--env=选项指定环境。

例如$ php artisan db:seed --class=UsersTableSeeder --env=testing