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

时间:2013-01-19 07:51:16

标签: php .htaccess environment laravel

我目前正在我的共享主机帐户上部署Laravel项目。它是一个开放项目,作为公共存储库托管在GitHub上。因此,我在我的.htaccess配置文件中使用由database.php文件设置的动态变量用于我的生产环境。这允许我在主机上使用git pull命令更新我的部署,这有助于加快工作。

database.php文件与

类似
$database = $_SERVER['DBNAME'];

$database_user = $_SERVER['DBUSER'];

这与部署到PagodaBox&在浏览器中按预期运行的所有功能都可以完美地应用于应用程序,没有任何抱怨。

我遇到的问题是工匠无法使用这些变量,而是尝试使用我认为在处理migrate指令时清空变量来连接数据库。我收到一个错误,工匠试图连接到没有密码的数据库。我一直在使用--env=production调用工匠,并对此进行了测试,但发现它仅在database.php文件明确指定变量而不是环境变量时才有效。

有没有办法让工匠“看到”这些环境变量?


迄今为止对我有用的答案:

http://forums.laravel.io/viewtopic.php?pid=8455

Environment driven database settings in Laravel?

2 个答案:

答案 0 :(得分:5)

因为Artisan是一个CLI PHP请求 - 请求永远不会访问.htaccess文件 - 因此您的变量永远不会被设置。

作为一种解决方法 - 您可以在第3行(就在<?php之后)

之后在工匠文件中定义变量
$_SERVER['DBNAME'] = 'test';
$_SERVER['DBUSER'] = 'something';

编辑:我刚刚注意到你说这是在github上公开托管 - 所以你不想在文件中包含你的用户名/密码?也许将工匠文件作为.gitignore组的一部分 - 所以你不要推/拉那个单独的文件?

答案 1 :(得分:3)

设置环境变量的功能内置于Laravel中,因此没有理由在.htaccess中执行此操作。 Laravel的内置方式可以毫无困难地与工匠合作。

请参阅有关您要保护的环境变量的文档部分。

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