Управление конфигурацией в 12-факторных приложениях

Мне понравилось использовать Rails на Heroku, и вот так я могу настроить свойство конфигурации приложения Heroku без необходимости вносить изменения в xyz.yml и повторно развертывать.

Было бы неплохо полностью покончить с конфигурационными файлами Yaml в моем приложении Rails и полагаться как можно больше на сохранение конфигурации в ENV. Это согласуется с принципом 12-factor config.

Тем не менее, есть некоторые компромиссы при переключении с управления конфигурацией на основе Yaml на основанный на Heroku/12-фактор основе.

  • Хотя верно, что распространение развертываний (qa, stage, prod, dev, demo, labs) может привести к распространению файлов Yaml, очень легко скопировать-вставить, чтобы создать новый профиль конфигурации. Я не вижу способ "скопировать" профили конфигурации из одного развертывания в другое в Heroku.
  • Сохранение данных конфигурации в репо означает, что в случае с Heroku развертывание, настройка и приложение выполняются за одну операцию. Если бы я перенесла свою конфигурацию из файлов Yaml и в переменные ENV, мне пришлось бы настроить мое приложение на отдельном этапе после развертывания.

Хотелось бы услышать от людей, которые использовали 12-факторную конфигурацию стиля в своих частных приложениях и как они управляли множеством переменных конфигурации во множестве развертываний.

  • Как быстро настроить новое развертывание?
  • Где вы храните свой авторитетный источник переменных конфигурации, если не репо? Как вы распространяете его среди разработчиков?

Спасибо!

17
задан maxenglander 05 июля '12 в 0:04
источник поделиться
2 ответов

Вы можете сделать это относительно легко с помощью некоторых простых сценариев оболочки, перебрать существующие переменные через конфигурацию heroku или версию heroku: info v99, а затем установить конфигурацию heroku: set k = v --app

Но если это проблема/боль/трение, возможно, у вас слишком много в настройке env var.

4
ответ дан Mâtt Frëëman 05 июля '12 в 20:12
источник поделиться

То, что я обычно использую, - это Yaml, использующее ENV и предоставляющее значения по умолчанию. Например, YAML может быть ERB'ed счастливо включить ваши ENV vars:

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

Вам просто нужно убедиться, что вы загрузите Ямл с помощью ERB, когда вы его прочитали:

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

Таким образом, ваш код отлично работает в dev, но также позволяет вам устанавливать конфигурационные варны в среде.

10
ответ дан Neil Middleton 05 июля '12 в 17:40
источник поделиться

Другие вопросы по меткам