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

时间:2012-07-04 21:04:11

标签: ruby-on-rails configuration heroku 12factor

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

完全取消我的Rails应用程序中的Yaml配置文件会很好,并且尽可能地依赖于在ENV中存储配置。这符合12-factor config原则。

然而,在从基于Yaml的配置管理切换到基于Heroku / 12因子的配置管理方面存在一些权衡。

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

希望听到那些在私有应用程序中使用过12因素样式配置的人,以及他们如何在大量部署中管理大量配置变量。

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

谢谢!

3 个答案:

答案 0 :(得分:10)

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

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

您只需要确保在阅读时加载带有ERB的Yaml:

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

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

答案 1 :(得分:4)

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

但如果它的问题/痛苦/摩擦可能你的env var配置中有太多内容。

答案 2 :(得分:0)

有点迟到的答案,但我相信这正是你要找的。

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