【问题标题】:Why are .env files preferred over .yaml files for environment variables?为什么 .env 文件优先于 .yaml 文件作为环境变量?
【发布时间】:2019-04-22 18:52:27
【问题描述】:

主要原因是什么,Symfony 更喜欢使用 .env 文件 - 在其中保存环境变量的值 - 而不是使用 更多灵活的 .yaml 文件

我问这个,因为我读到this comment,其中指出:

当我们使用 .yaml 文件时,它要简单得多。
我完全理解为什么我们需要切换到 .env 文件,但恕我直言,我们应该重新考虑一切。

感谢您的宝贵时间。

【问题讨论】:

  • 使用环境变量的一个明显优势是您可以在不重建生产缓存的情况下更新它们的值。还有许多使用环境变量的部署策略。话虽如此,我只是使用了一个 parameters.yaml 文件。仍然可以正常工作。
  • 谢谢@Cerad。也许您已经回答了我的问题,但我无法完全理解。对不起......我的问题实际上只与使用的文件类型有关。我的意思是,为什么 Symfony 更倾向于推荐在 .env 文件中定义环境变量,而不是在 .yaml 文件中?即使我不使用 Symfony,我也希望在 .yaml 文件中定义我自己的 Web MVC 的 env vars 值。虽然我有一些疑问,但在看到 Symfony 和许多其他大型项目使用 .env 文件之后。
  • 需要明确的是,99% 的 Symfony 配置仍然使用 yaml 文件完成。只有少数环境特定值或机密信息存储在 .env 文件中。而且您的问题不适合stackoverflow。 sof 想看看具体的问题。如果你查看 Symfony 文档中的社区部分,你会看到一些 Symfony 特定的讨论区。没有人会告诉你为什么你被投反对票,因为提供反对票的细节被认为是“不友善的”。
  • *NIX 操作系统上,有一个名为env 的shell 命令。使用的语法是您在当前正在使用的 .env 文件中看到的 - KEY=VALUE.env 不必存在。它用于在每个环境的基础上覆盖现有值。 .env 不用于 Symfony 或其他流行框架中的配置 - 它用于补充它,我的 猜测 是他们正试图遵循铺好的道路以前在 Unix OS 上工作的人。 .env 简单易用,并且多个不同的项目(非 php)相关正在使用它,因此在 devops 上更改配置非常容易。
  • 好吧,来自一个整天都在做 devops 的人(我)的 POV,我可以告诉你,我和我的其他同事更喜欢 .env 而不是其他格式。原因很简单——学习语法需要 0 时间,而对于像 .yaml 这样的格式,情况并非如此。可悲的是,我们确实必须使用.yaml.envjson 配置、.ini.cnf.conf 以及其他导致我们遇到XKCD: Standards 的情况:)

标签: php symfony environment-variables symfony4 symfony-4.2


【解决方案1】:

根据 Symfony 的一篇博文:

Their main advantages are that they can be changed between deploys without changing any code and that they don't need to be checked into the code repository.

yaml 文件不能这样说。

https://symfony.com/blog/new-in-symfony-3-2-runtime-environment-variables

【讨论】:

  • 博客作者试图用一个短语来解释 env vars 的优势,对于我们一些读者来说,这个短语可以有多种含义。结果,您的句子“yaml文件不能说相同。”对我来说也是抽象的。 Nicodemuz,也许您比我更了解该博客条目。您介意用更清晰的语言向我解释所提出的原则吗?尤其是你强调的比较。我认为一个小例子也会有所帮助......我对您更新的答案非常感兴趣,因为我觉得它将包含我正在寻找的内容。提前谢谢你。
  • @dakis 我认为您应该首先熟悉什么是环境变量。也许阅读关于它的 Wikipedia 文章:en.wikipedia.org/wiki/Environment_variable .. 您应该将环境变量视为变量,这些变量可能会被同样运行在同一服务器上的多个其他应用程序访问。这样,您可以通过更改单个变量直接配置多个应用程序。一旦您了解了环境变量的好处和用途,您很快就会意识到在 yaml 文件中定义它们实际上并不会使它们成为“环境变量”。
  • 谢谢。我懂了。我的问题可能有点令人困惑。让我尝试更清楚一点:一方面,存在 “真实”环境变量(无论是操作系统范围的,还是在虚拟主机中定义的环境变量,例如例如,SetEnv)。当发出 HTTP 请求(例如在浏览器中)时,PHP 引擎将它们自动保存在 $_SESSION$_ENV 变量中。另一方面,还有“自定义”环境变量:开发人员在扩展名为“.env”的文件中定义的那些键/值对(通常)。
  • 在运行时,以编程方式读取所提及的文件,并且包含的​​值覆盖(或添加到)之前保存在 $_SESSION 和 @ 中的“真实”环境变量987654328@ 数组...好吧,我想开始使用 .yaml 文件而不是 .env 文件来在我的项目中定义“自定义”环境变量。但我决定先在网上研究一下。然后我发现,Symfony 有一个重要的理由仍然使用 .env 文件,即使他们可以使用 .yaml 文件。我试图找出这个原因。
猜你喜欢
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
相关资源
最近更新 更多