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

Posted

技术标签:

【中文标题】Artisan 无法使用数据库配置文件中的 $_SERVER 变量【英文标题】:Artisan unable to use $_SERVER variables from database config file 【发布时间】:2013-01-02 22:52:43 【问题描述】:

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

database.php 文件有类似的东西

$database = $_SERVER['DBNAME'];

$database_user = $_SERVER['DBUSER'];

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

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

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


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

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

Environment driven database settings in Laravel?

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

啊,我明白了。是的,绝对不能将我的用户/通行证放入公共回购中。必须使用您的解决方案将其添加到忽略的文件列表中。谢谢! 实际上考虑到这一点......任何需要为 github 项目做出贡献的人都需要工匠文件才能使用 laravel,因此将其排除在存储库中会适得其反......我要去有条件地要求工匠的配置文件并将该文件添加到忽略列表中。【参考方案2】:

设置环境变量的功能是 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',
);

【讨论】:

以上是关于Artisan 无法使用数据库配置文件中的 $_SERVER 变量的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 artisan 命令运行迁移

PHP Artisan Tinker 无法写入配置路径

“php artisan serve”在哪里读取 Mac OS 中的配置? [复制]

laravel 无法打开输入文件:artisan (5.3)

Laravel - php artisan migrate - SQLSTATE[HY000] [14] 无法打开数据库文件

无法 php artisan 迁移