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 变量的主要内容,如果未能解决你的问题,请参考以下文章
“php artisan serve”在哪里读取 Mac OS 中的配置? [复制]
laravel 无法打开输入文件:artisan (5.3)
Laravel - php artisan migrate - SQLSTATE[HY000] [14] 无法打开数据库文件