我目前正在我的共享主机帐户上部署一个Laravel项目。它是一个开放项目,作为公共存储库托管在GitHub上。因此,我在生产环境中使用由database.php
配置文件中的.htaccess
文件设置的动态变量。这允许我在主机上使用git pull
命令更新我的部署,这有助于加快工作速度。
database.php文件类似于
$database = $_SERVER['DBNAME'];
$database_user = $_SERVER['DBUSER'];
这很像部署到PagodaBox &在浏览器中,所有功能都按照预期运行,对于应用程序来说非常好,没有任何抱怨。
我遇到的问题是,artisan无法使用这些变量,而是尝试在处理migrate
指令时使用我认为为空的变量连接到数据库。我得到一个错误,工匠试图连接到数据库没有密码。我一直在使用--env=production
调用工匠,并对此进行了测试,但发现只有当database.php
文件具有显式指定的变量而不是作为环境变量时,它才会起作用。
是否有办法让工匠"看到"这些环境变量?
迄今为止对我证明有用的答案:
http://forums.laravel.io/viewtopic.php?pid = 8455
和
环境驱动的数据库设置Laravel?
因为Artisan是一个CLI PHP请求-请求永远不会访问.htaccess
文件-因此您的变量永远不会设置。
作为一种解决方法-您可以在第3行(就在<?php
之后)
$_SERVER['DBNAME'] = 'test';
$_SERVER['DBUSER'] = 'something';
编辑:我刚刚注意到你说这是github上的公共托管-所以你不想在文件中包含你的用户名/密码?也许把工匠文件作为.gitignore
组的一部分-所以你不推/拉单一文件?
设置环境变量的功能是内置到Laravel的,所以没有理由在.htaccess
中这样做。Laravel的内置方式与artisan一起工作没有任何麻烦。
请参阅文档的这一部分,了解您想要保护的环境变量。
http://laravel.com/docs/configuration protecting-sensitive-configuration
引用:…在项目的根目录下创建一个
.env.local.php
文件[…].env.local.php应该返回一个键值对数组,很像一个典型的Laravel配置文件:<?php return array( 'TEST_STRIPE_KEY' => 'super-secret-sauce', );
该文件返回的所有键值对将自动通过$_ENV和$_SERVER PHP"superglobals"可用。现在,您可以从配置文件中引用这些全局变量:
'key' => $_ENV['TEST_STRIPE_KEY']
确保将
.env.local.php
文件添加到.gitignore
文件中。这将允许团队中的其他开发人员创建他们自己的本地环境配置,以及对源代码管理隐藏敏感配置项。添加私有环境变量
<?php return array( 'MY_SECRET_KEY' => 'super-secret-sauce', );