【发布时间】:2015-04-21 21:17:52
【问题描述】:
编辑: 这个问题最初适用于测试,但本质上我想知道是否有可能拥有多个可以定义多组环境变量的 .env 文件;就像 L4 使用 env.local.php、env.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()->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