【问题标题】:Managing config in 12-factor applications在 12 要素应用程序中管理配置
【发布时间】:2012-07-05 07:59:32
【问题描述】:

我很喜欢在 Heroku 上使用 Rails,因此我可以调整 Heroku 应用程序的配置属性,而无需对 xyz.yml 进行更改并重新部署。

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

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

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      但如果它是一个问题/痛苦/摩擦,也许你的 env var 配置中有太多内容。

      【讨论】:

      • 我不使用 Heroku,但我认为 12 因子可以应用于任何 SaaS 应用程序。我可以创建一个自定义 shell 脚本来在我的环境中创建该配置。但是,在这个背景之后,我的问题是:让我的配置变量(如数据库访问数据)成为环境变量没有安全问题?
      【解决方案3】:

      我通常使用的是使用 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)
      

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

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 2011-09-07
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 2015-04-04
        • 2011-03-07
        • 2016-11-08
        • 1970-01-01
        相关资源
        最近更新 更多