工匠无法使用数据库配置文件中的$_SERVER变量


Artisan unable to use $_SERVER variables from database config file

我目前正在我的共享主机帐户上部署一个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之后)

中定义artisan文件本身中的变量。
$_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',
);