十二因素应用程序:与配置指南保持一致的方法

Twelve-Factor Apps: ways to stay align with the config guideline

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

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

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

我的看法对吗?我想知道是否有任何最佳实践来解决这个问题。

谢谢!

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

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

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

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

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

您还可以设置环境 server-wide:/etc/profile/etc/environment。这使它们可用于整个系统上的任何服务。

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

这里有一件很酷的事情:

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