1

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

database.php 文件的内容类似于

$database = $_SERVER['DBNAME'];

$database_user = $_SERVER['DBUSER'];

这很像部署到 PagodaBox 时所做的事情,并且对于应用程序来说工作得非常好,所有东西在浏览器中都按预期运行,没有任何抱怨。

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

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


到目前为止证明对我有用的答案:

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

Laravel 中的环境驱动数据库设置?

4

2 回答 2

5

因为 Artisan 是一个 CLI PHP 请求——请求永远不会命中.htaccess文件——因此你的变量永远不会被设置。

<?php作为一种解决方法 - 您可以在第 3 行定义 artisan 文件本身的变量(就在

$_SERVER['DBNAME'] = 'test';
$_SERVER['DBUSER'] = 'something';

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

于 2013-01-19T08:49:42.617 回答
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',
);
于 2014-02-07T22:42:19.350 回答