Symfony 5.1.8 忽略来自 .env.test / .env.test.local 的覆盖
Symfony 5.1.8 ignoring overrides from .env.test / .env.test.local
我有一个 Symfony 5.1.8 项目,我想在其中使用不同的数据库连接进行测试。为此,我为 DATABASE_URL
设置了与我的 .env.local
不同的值的文件 .env.test.local
,就像 .env
文件中的文档指出的那样:
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
# * .env.local contains default values for the environment variables needed by the app
# * .env.local.local uncommitted file with local overrides
# * .env.local.$APP_ENV committed environment-specific defaults
# * .env.local.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env.local files.
Symfony 似乎忽略了这些覆盖并始终使用 .env.local
.
中提供的值
为了找出到底发生了什么,我将 bin/console
中的最后一行从 $application->run($input);
更改为 dd($_ENV);
,以便转储 symfony 在执行期间看到的任何环境变量。
以下是我的不同 .env
文件的内容:
.env
APP_ENV=dev
ENV_VAR=ENV
.env.local
APP_ENV=dev
ENV_VAR=ENV_LOCAL
.env.test
APP_ENV=test
ENV_VAR=ENV_TEST
.env.test.local
APP_ENV=test
ENV_VAR=ENV_TEST_LOCAL
当我运行php bin/console
现在输出如下:
array:10 [
"APP_ENV" => "dev"
"ENV_VAR" => "ENV_LOCAL"
...
]
这是我所期望的。但是当我 运行 php bin/console -e test
正在打印以下内容时:
array:10 [
"APP_ENV" => "test"
"ENV_VAR" => "ENV_LOCAL"
...
]
根据 -e
参数,APP_ENV
设置正确,但对于 ENV_VAR
,仍然采用 .env.local
中的值。
我是否对 .env
文件及其行为有误解,或者这是某种错误?
以防万一,我目前正在 Windows 10 和 PHP 7.3.24.
这是我这边的配置错误。
当我第一次开始这个项目时,我没有完全掌握多级 .env
文件的概念,并对 bin/console
可执行文件做了一点改动,使事情对我来说“更容易”:
curl -o console.temp https://raw.githubusercontent.com/symfony/recipes/master/symfony/console/5.1/bin/console
diff console console.temp
31c31
< (new Dotenv())->bootEnv(dirname(__DIR__) . '/.env.local');
---
> (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
这当然会阻止整个 DotEnv 东西正常工作。我只是忘记了我介绍的这个更改,但是感谢@PierrickM 对我的问题的评论,现在一切正常!
我有一个 Symfony 5.1.8 项目,我想在其中使用不同的数据库连接进行测试。为此,我为 DATABASE_URL
设置了与我的 .env.local
不同的值的文件 .env.test.local
,就像 .env
文件中的文档指出的那样:
# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
# * .env.local contains default values for the environment variables needed by the app
# * .env.local.local uncommitted file with local overrides
# * .env.local.$APP_ENV committed environment-specific defaults
# * .env.local.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env.local files.
Symfony 似乎忽略了这些覆盖并始终使用 .env.local
.
为了找出到底发生了什么,我将 bin/console
中的最后一行从 $application->run($input);
更改为 dd($_ENV);
,以便转储 symfony 在执行期间看到的任何环境变量。
以下是我的不同 .env
文件的内容:
.env
APP_ENV=dev
ENV_VAR=ENV
.env.local
APP_ENV=dev
ENV_VAR=ENV_LOCAL
.env.test
APP_ENV=test
ENV_VAR=ENV_TEST
.env.test.local
APP_ENV=test
ENV_VAR=ENV_TEST_LOCAL
当我运行php bin/console
现在输出如下:
array:10 [
"APP_ENV" => "dev"
"ENV_VAR" => "ENV_LOCAL"
...
]
这是我所期望的。但是当我 运行 php bin/console -e test
正在打印以下内容时:
array:10 [
"APP_ENV" => "test"
"ENV_VAR" => "ENV_LOCAL"
...
]
根据 -e
参数,APP_ENV
设置正确,但对于 ENV_VAR
,仍然采用 .env.local
中的值。
我是否对 .env
文件及其行为有误解,或者这是某种错误?
以防万一,我目前正在 Windows 10 和 PHP 7.3.24.
这是我这边的配置错误。
当我第一次开始这个项目时,我没有完全掌握多级 .env
文件的概念,并对 bin/console
可执行文件做了一点改动,使事情对我来说“更容易”:
curl -o console.temp https://raw.githubusercontent.com/symfony/recipes/master/symfony/console/5.1/bin/console
diff console console.temp
31c31
< (new Dotenv())->bootEnv(dirname(__DIR__) . '/.env.local');
---
> (new Dotenv())->bootEnv(dirname(__DIR__).'/.env');
这当然会阻止整个 DotEnv 东西正常工作。我只是忘记了我介绍的这个更改,但是感谢@PierrickM 对我的问题的评论,现在一切正常!