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

Kar*_*arl 5 php apache environment-variables laravel laravel-4

我正在使用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'    => '',
    ),


),

);
Run Code Online (Sandbox Code Playgroud)

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

SetEnv DB_HOST ***.***.***.***
SetEnv DB_NAME database
SetEnv DB_USERNAME databaseuser
SetEnv DB_PASSWORD databasepass
Run Code Online (Sandbox Code Playgroud)

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

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

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

我试过强迫环境看看它是否可以通过使用来获取变量 php artisan --env=production migrate

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

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

任何想法将不胜感激.

rya*_*ter 1

您应该按照laravel 文档中的描述使用.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',

);
Run Code Online (Sandbox Code Playgroud)

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

migrate当运行像或这样的 artisan 命令时,db:seed您可以使用该--env=选项指定环境。

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