我正在写一篇关于十二因素应用程序的论文,我想知道你是否可以在这里帮助我。
十二要素应用程序的第三要素指出:在环境中存储配置。 (https://12factor.net/config)。根据该页面,部署之间可能有所不同的所有配置都应提取到环境变量中。
我想知道在创建例如时如何在开发过程中应用Rails 应用程序。目前我看到两种方式,在我看来都不完美。
- 将环境变量存储在文件中,例如.bashrc or .zshrc。我不知道如何使用这种方法管理测试和开发环境,因为两者都需要使用相同的环境变量进行特定配置。此外,当处理多个项目时,这会使 shell 中充满变量,但它似乎符合十二因素应用程序方法。
- 使用类似的工具https://github.com/bkeepers/dotenv它使用作为项目一部分的文件来存储配置,因此与Rails框架已经提供的secrets.yml或database.yml没有太大区别,并且不完全符合十二因素应用程序的想法(可以仍然会被意外地签入代码库,并且大多与语言无关)
我的观点正确吗?我想知道是否有任何最佳实践来解决这个问题。
Thanks!
基本上,环境变量可以根据您的上下文进行访问。运行进程、系统、应用程序的用户都可以修改您可以在应用程序中的任何给定时间/地点访问的变量集。因此,您将它们放在哪里取决于您的应用程序的需求 - 您是否需要在同一服务器上隔离不同的应用程序?您需要有效管理数十个应用程序吗?您是否需要配置和填充新的服务器环境? ETC。
至于选择,这是我经历过的:
The .*rc
文件适合这种配置,即使您可能不喜欢flavor of it. 这些使它们可供其环境运行这些文件的用户使用,所以如果您的登录用户是ubuntu
但您的服务以其他用户的身份运行,例如www-data
or httpd
.
Dotenv 也很好,因为它在运行时将变量注入到实际的 ENV 中。不完美,但仍然可以接受恕我直言(假设你never正如您所指出的,将这些变量提交给 vc)。这使得它们可用于使用 Dotenv 的单个应用程序.
其他方法是将它们(对于 Web 应用程序)放入 Apache 或 Nginx(或其他 Web 服务器)配置中。它们可以放入虚拟主机定义层的环境中,或者放在服务/守护进程配置层中(尽管我认为 Nginx 不支持虚拟主机环境)。这使得变量可用于由这些服务启动的任何应用程序。这对于网站或网络应用程序来说很常见。
您还可以在服务器范围内设置环境:/etc/profile
or /etc/environment
。这使得它们可用于整个系统上的任何服务。
除此之外(多服务器应用程序、复杂的托管等)更多的是运维问题 - 管理多个配置集仍然与 12-Factor 应用程序相关,但不会有一个简单的答案:)
不过,这是很酷的事情:
您不必立即做出决定!使用环境变量是一种非常灵活的方法!您可以在您的 Development Macbook 上使用 DotEnv,将它们放入您的 Staging 环境中的 Apache 中,然后使用.bashrc
对于您的测试/集成服务器,并将它们放入/etc/environment
在您定制的 Lighttpd 生产服务器上。让您的应用程序期望您的配置位于 ENV 中意味着你的应用程序不必关心它是如何到达那里的!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)