gpt4 book ai didi

ruby-on-rails - 十二要素应用程序 : ways to stay align with the config guideline

转载 作者:行者123 更新时间:2023-12-05 05:22:11 25 4
gpt4 key购买 nike

我正在写一篇关于十二因素应用程序的论文,我想知道你是否可以帮助我。

十二因素应用程序的第三个因素是:在环境中存储配置。 (https://12factor.net/config)。根据该页面,所有可能因部署而异的配置都应提取到环境变量中。

我想知道在创建时如何在开发过程中应用一个 Rails 应用程序。目前我看到两种方式,在我看来都不是完美的。

  • 将环境变量存储在类似.bashrc.zshrc 的文件中。我不太清楚如何使用这种方法管理测试和开发环境,因为两者都需要使用相同环境变量的特定配置。此外,在处理多个项目时,这会使 shell 充满变量,但它似乎符合十二因素应用程序方法。
  • 使用类似https://github.com/bkeepers/dotenv 的工具它使用作为项目一部分的文件来存储配置,因此与 Rails 框架已经提供的 secrets.yml 或 database.yml 没有太大区别,并且不完全符合十二因素应用程序的想法(可以仍然会被意外 checkin 代码库,并且大部分与语言无关)

我的观点正确吗?我想知道是否有任何最佳实践来解决这个问题。

谢谢!

最佳答案

基本上,可以根据您的上下文访问环境变量。运行进程、系统、应用程序的用户都可以修改您可以在应用程序中的任何给定时间/地点访问的变量集。所以,你把它们放在哪里取决于你的应用程序的需要——你需要在同一台服务器上隔离不同的应用程序吗?您是否需要有效管理数十个应用程序?您是否需要配置和填充新的服务器环境?等等

至于选项这里是我经历过的:

.*rc 文件适合这种配置,即使您可能不喜欢它的风格这些使它们可供其环境运行文件的用户使用,因此如果您的登录用户是 ubuntu 但您的服务以其他用户身份运行,则它可能对您不起作用,例如 www-datahttpd

Dotenv 也很好,因为它在运行时将变量注入(inject)到实际的 ENV 中。不完美,但仍然可以接受恕我直言(假设您从不将这些变量提交给 vc,正如您指出的那样)。这使得它们可用于使用 Dotenv 的单个应用程序

其他方法是(对于网络应用程序)将它们放在 Apache 或 Nginx(或其他网络服务器)配置中。它们可以在虚拟主机定义层或服务/守护程序配置层放入环境(尽管我认为 Nginx 不支持虚拟主机环境)。 这使得变量可用于由这些服务启动的任何应用。这对于网站或网络应用来说很常见。

您还可以在服务器范围内设置环境:/etc/profile/etc/environment。这使得它们可用于整个系统上的任何服务。

除此之外(多服务器应用程序、复杂托管等)更多的是运维问题 - 管理多个配置集仍然与 12 因素应用程序相关,但不会有一个简单的答案:)

不过,这是很酷的事情:

您不必马上做出决定!使用环境变量是一种非常灵活的方法!您可以在您的开发 Macbook 上使用 DotEnv,将它们放在您的暂存环境中的 Apache 中,将 .bashrc 用于您的测试/集成服务器,并将它们放在 /etc/environment 中在您定制的 Lighttpd 生产服务器上。让您的应用期望您的配置在 ENV 中意味着您的应用不必关心它是如何到达那里的!!!

关于ruby-on-rails - 十二要素应用程序 : ways to stay align with the config guideline,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com