20

我很喜欢在 Heroku 上使用 Rails,而且我可以调整 Heroku 应用程序的配置属性,而无需提交更改xyz.yml和重新部署。

在我的 Rails 应用程序中完全取消 Yaml 配置文件,并尽可能依赖在 ENV 中存储配置会很好。这与12 因素配置原则相一致。

但是,在从基于 Yaml 的配置管理切换到基于 Heroku/12 因子的配置管理时需要权衡取舍。

  • 虽然部署(qa、stage、prod、dev、demo、labs)的扩散确实会导致 Yaml 文件的扩散,但复制粘贴来创建新的配置文件非常容易。我看不到在 Heroku 中将配置文件从一个部署“复制”到另一个部署的方法。
  • 在 repo 中存储配置数据意味着,在 Heroku 的情况下,部署和配置以及应用程序是在单个操作中完成的。如果我要将配置从 Yaml 文件中移到 ENV 变量中,我必须在部署后在单独的步骤中配置我的应用程序。

想听听在他们的私有应用程序中使用 12 因素样式配置的人的意见,以及他们如何跨大量部署管理大量配置变量。

  • 如何快速配置新部署?
  • 如果不是 repo,您​​将配置变量的权威来源保存在哪里?您如何在开发人员之间分发它?

谢谢!

4

3 回答 3

11

我通常使用的是使用 ENV 并提供默认值的 Yaml。例如,可以愉快地对 YAML 进行 ERB 处理以包含您的 ENV 变量:

foo:
  var: ENV["MY_CONFIG"] || "default_value"

您只需要确保在阅读时使用 ERB 加载 Yaml:

YAML.load(ERB.new(File.read("#{Rails.root}/config/app_config.yml")).result)

通过这样做,您的代码在开发中可以正常工作,但也允许您在环境中设置配置变量。

于 2012-07-05T14:40:08.420 回答
5

您可以使用一些简单的 shell 脚本相对容易地完成此操作,通过 heroku config 或 heroku release:info v99 迭代现有变量,然后设置 heroku config:set k=v --app

但是,如果它是一个问题/痛苦/摩擦,那么您的 env var 配置中可能有太多内容。

于 2012-07-05T17:12:57.913 回答
1

答案有点晚了,但我相信这就是你要找的。

我开发了一个名为settei的 gem ,允许您使用 YAML 文件来配置应用程序。然而,gem 会在部署期间将 YAML 文件序列化为一个环境变量。这样一来,两全其美:YAML 便于管理/创建衍生环境,ENV 用于 12 因素合规性。

于 2018-03-09T03:36:55.493 回答