在12因子应用程序中管理配置

max*_*der 18 configuration ruby-on-rails heroku 12factor

我很高兴在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因子样式配置的人,以及他们如何在许多部署中管理大量配置变量.

  • 您如何快速配置新部署?
  • 你在哪里保留配置变量的权威来源,如果不是回购?你如何在开发者中分发它?

谢谢!

Nei*_*ton 10

我通常使用的是Yaml使用ENV并提供默认值.例如,YAML可以很高兴地将ERB包括在你的ENV变量中:

foo:
  var: ENV["MY_CONFIG"] || "default_value"
Run Code Online (Sandbox Code Playgroud)

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

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

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


Mât*_*man 5

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

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