【问题标题】:Setting multiple sets of environment variables in Laravel 5在 Laravel 5 中设置多组环境变量
【发布时间】:2015-04-21 21:17:52
【问题描述】:

编辑: 这个问题最初适用于测试,但本质上我想知道是否有可能拥有多个可以定义多组环境变量的 .env 文件;就像 L4 使用 env.local.phpenv.testing.php 等所做的一样


我正在使用 Laravel 5 并在 homestead box 上进行开发。

我的 .env 文件填充了我的本地环境变量(mysql 数据库等)。

我希望使用 sqlite 数据库进行测试,所以我向 phpunit.xml 添加了一些变量,所以它看起来像这样:

<php>
    <env name="APP_ENV" value="testing"/>
    <env name="CACHE_DRIVER" value="array"/>
    <env name="SESSION_DRIVER" value="array"/>
    <env name="DB_DRIVER" value="sqlite" />
    <env name="DB_PATH" value="database.sqlite" />
</php>

所有适当的环境变量都在配置文件中引用,例如env('DB_DRIVER').

然而,当我尝试使用 php artisan migrate --env=testing 迁移数据库时,我得到“没有要迁移的内容”,这表明 Laravel 正在尝试迁移我的本地 (mysql) 数据库(已经迁移)。

我决定通过 tinker 进一步探索,所以我运行了php artisan tinker --env=testing。在修补程序中,我运行了app()-&gt;environment();,它返回了“测试”。到目前为止一切顺利!

接下来我通过$_ENV 回显环境变量,它返回了我的本地环境变量,尽管环境设置为测试。

这是为什么?似乎 Laravel 忽略了 phpunit.xml 环境变量,而只使用 .env 文件...

编辑

如果通过 phpunit 本身运行,似乎 laravel 只使用 phpunit.xml 文件,即使环境设置为单独测试。

如果有人知道如何在 L5 中设置多个环境,我将不胜感激,因为仅制作 .env.testing 文件的 L4 方式不起作用。

【问题讨论】:

  • 你的 phpunit.xml 文件中的配置值只会被 PHPUnit 使用。任何 Artisan 命令都将使用您的 .env 文件中的内容。

标签: php laravel environment-variables laravel-5


【解决方案1】:

原始问题的快速解决方法,只是 testing 环境案例,是从 tests/TestCase.php 类调用 $this-&gt;artisan('migrate');,因此它将获得 phpunit.xml 中定义的数据库配置值和执行迁移。

【讨论】:

  • 确实这看起来是最好的解决方案。这实际上是我最终做的。
【解决方案2】:

在 .env 文件中定义环境变量。 例如:

DB_HOST=localhost
DB_DATABASE=database_name
DB_USERNAME=homestead
DB_PASSWORD=secret

然后您可以使用访问这些变量

env('DB_HOST')

【讨论】:

  • 问题是关于测试特定的环境变量。问题的第 2 行指出存在一个 .env 文件。
猜你喜欢
  • 1970-01-01
  • 2015-04-19
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
相关资源
最近更新 更多