【发布时间】:2020-01-18 00:23:42
【问题描述】:
我对 Symfony Dotenv 默认行为不满意,因为我想要一个 .env.override,它会覆盖现有的环境值。
所以我想在config/bootstrap.php中添加以下代码
$envLocal = dirname(__DIR__).'/.env.override';
if (file_exists($envLocal)) {
(new Dotenv(false))->overload($envLocal);
}
编辑此文件 (config/bootstrap.php) 有问题吗?未来的 Symfony 更新可以删除它吗?
【问题讨论】:
-
tbh,我不明白这一点。 .env 应该是一个 local 文件!本地文件的默认值在 .env.dist 中,而 .env 数据的包含在 config/**.yaml 中……所以从技术上讲,.env 已经是覆盖。你现在想要覆盖覆盖吗?
-
@Jakumi 谢谢你的评论;实际上,出于我不会在这里解释的原因,我们不会在我们的项目中使用
.env.dist(即使这是一个好主意)。这就是为什么我的问题是关于修改config/bootstrap.php。 -
根据您的 DotEnv 组件版本,较新版本的 DotEnv 和引导程序将具有
.env.local的标准行为,以便在本地轻松覆盖环境变量。同样在生产环境中,您通常希望从 nginx/apache、docker 或作为服务器 env var 覆盖 ENV 变量。当然这是真的,正如下面的答案所说,你可以修改 bootstrap.php,我真的不明白你为什么要这样做:) -
@ReinBaarsma 谢谢,我同意这不是正确的解决方案。另一个问题的目标是进一步解决这个问题,因为实际上,它可能需要处理 docker (.. 或者不是,现在有点神秘),因为覆盖在生产中运行良好,但不是在码头环境中。谢谢大家。
-
@yolenoyer 在我们的项目中,我们使用了一个简单的
.env,它包含了本地开发所需的一切(显然没有任何生产机密),并且只存在于 git 中。对于生产,我们通过 kubernetes 和一个加密的配置文件在 AWS 中设置了环境变量,但听起来您的生产情况已经开始工作了。 docker 的一个很酷的地方在于,您实际上并不需要.env.local覆盖,因为所有开发人员都应该拥有相同的 docker,因此也应该拥有相同的 .env 变量。