我正在使用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(),我仍然没有运气。
非常感谢任何想法。
答案 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
。
运行migrate
或db:seed
等工匠命令时,您可以使用--env=
选项指定环境。
例如$ php artisan db:seed --class=UsersTableSeeder --env=testing