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

2023-12-07

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

十二要素应用程序的第三要素指出:在环境中存储配置。 (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(使用前将#替换为@)

十二要素应用程序:与配置指南保持一致的方法 的相关文章

随机推荐

  • 让我的 Android 表单在键盘出现时出现

    我的登录表单有问题 它由用户名 密码和提交按钮组成 但是当我触摸我的用户名 EditText 时 键盘会显示并覆盖我的密码和提交按钮 然后我将清单更改为 android windowSoftInputMode adjustResize st
  • 在linux中拦截/重新路由TCP SYN数据包到C++程序

    我试图找到最简单的方法来拦截我的计算机在 C 程序中发送的 TCP SYN 数据包 我知道有几个选择 一种方法是监视所有流量 并选择性地处理 SYN 数据包 对其余数据包不执行任何操作 我遇到的另一个选择是使用数据包过滤实用程序 它将 SY
  • C# 中的闪烁文本[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 如何使用 C 使控制台中的文本闪烁 Person b 走在正确的轨道上 但他们的代码需要一些更改 static void Main string txt Hello world whi
  • 如何通过 Javascript 更新 Microsoft CRM Online 上的表单字段

    我刚刚在 Microsoft Dynamics CRM Online 上创建了一个自定义订单表单 基本上 我想将总金额字段更新为数量和金额字段的乘积 我想我可以通过 JavaScript 来做到这一点 我刚刚打开 数量字段属性 菜单并进入
  • C 中的 XOR 如何查找出现奇数次的数字?

    int getOddOccurrence int ar int ar size int i int res 0 for i 0 i lt ar size i res res ar i return res Diver function to
  • PySpark:计算按 AUC 分组

    火花版本 1 6 0 我尝试计算按字段分组的 AUC ROC 下的面积 id 给出以下数据 Within each key value pair key is id value is a list of score label data s
  • 我怎样才能让jquery mobile“pagebeforeshow”事件每次都会触发,而不仅仅是刷新时触发

    我有一个 jquery 移动页面 它使用以下代码在访问页面时隐藏按钮 div jqmData role page live pagebeforeshow function apply btn hide 我的问题是 该事件仅在刷新页面时触发
  • 渲染 Play!Framework2 javascript 作为模板?

    我想从 Play Framework 2 中的模板返回 js 文件 我是这样做的 在我的视图文件夹中 我创建了一个模板文件 initials scala js 包含类似的内容 data Model find findList 然后 在我的控
  • JavaScript 中的错误值

    今天我遇到了一个有趣的面试问题 有点难住了我 有人问我关于错误价值观的问题 因此 未定义 NaN null 0 和空字符串都评估为 false 在 JavaScript 中了解这一点很有用的原因是什么 我唯一能想到的就是不必这样做 if m
  • 如何使用 $resource 将数组从 Angular js 传递到 REST 服务[重复]

    这个问题在这里已经有答案了 我是 AngularJs 和 REST 服务的新手 想知道如何使用 resource 将对象数组传递给 Angular js 中的 REST POST 调用 我知道如何传递单个参数 但不确定如何传递数组 这是我的
  • Dev -Cpp 编译器生成错误

    我似乎找不到任何有关如何解决此问题的信息 并且我以前使用过 Dev Cpp 但从未遇到过此问题 我尝试重新安装 Dev Cpp 和 MinGW 但似乎没有任何效果 i gw lib crt2 o text 0x8 In function m
  • 如何在 R 窗口中打开 R 数据文件

    我在 R 中有一些数据想要分析 但是 该文件未显示数据 相反 它仅显示数据中的变量 以下是我用来加载数据和产生的输出的过程 load C Users user AppData Local Temp 1 29 923 Macdonell RD
  • 出现在表单提交上的 jQuery Modal

    我有这样的代码 当用户提交表单时运行 这是为了阻止他们重新提交表单或离开页面并让他们知道表单正在执行某些操作 var lastx 0 var loadingAnim setInterval function UpdateSpinner lo
  • WPF:我可以重新设置复选框模板的样式吗,以便检查指示器变为红叉

    我找不到重新设置复选框 IsChecked 指示器样式的方法 正如我从复选框模板中看到的那样 无法重新设置指示器的样式 只能重新设置复选框的 框 有谁知道是否可以重新设置 IsChecked 指示器的样式 您必须替换整个 CheckBox
  • terraform 后端 s3 存储桶创建返回 403 w/ Terraform 0.11.1

    如何创建有权放置 terraform tfstate 文件的 S3 存储桶 如何将 tfstate 放入桶中 执行此操作的正确方法是什么 作为序言 我花了 6 个多小时试图解决这个问题 我看到了类似的帖子由 MFA 引起的问题 那不是我的问
  • z3 处理非线性实数运算的局限性

    我有一个程序可以生成非线性实数算术中的一组约束 考虑以下两个约束 gt v0 x v2 x v1 y v2 y v3 x v2 x v3 x v2 x v3 y v2 y v3 y v2 y v0 y v2 y v3 x v2 x v1 x
  • 是否可以禁用链接的工具提示?

    我的链接上没有设置任何标题或 alt 标签 因此当我悬停或单击并按住链接时 IE10 会使用 href 内容作为工具提示 我一直在四处寻找 但找不到任何覆盖此功能的解决方案 Update 我已经找到了解决我遇到的另一个问题的方法 当你触摸并
  • Node.js 套接字解释

    我正在构建一个应用程序 它将对远程 API 服务器进行大约一百万次调用 我可以将连接数量限制为例如 10 个吗 我将最大套接字设置为 10 可以吗 我试图了解这些参数的作用 keepAlive false maxSockets 999 ma
  • Google Analytics - 将 UserID 与我网站的帐户 ID 相匹配

    我的每个注册客户都有唯一的帐户 ID 例如 代理人编号 00173393 我想检索此信息通过谷歌分析 这不是个人信息 仅供统计使用 我实现了 userID 但是如何匹配用户 ID 和帐户 ID 是否可以为帐户 ID 号创建变量 你为什么不使
  • 十二要素应用程序:与配置指南保持一致的方法

    我正在写一篇关于十二因素应用程序的论文 我想知道你是否可以在这里帮助我 十二要素应用程序的第三要素指出 在环境中存储配置 https 12factor net config 根据该页面 部署之间可能有所不同的所有配置都应提取到环境变量中 我