Gestion de la configuration dans les applications à 12 facteurs

j'ai apprécié L'utilisation de Rails sur Heroku, et comme ça je peux ajuster la propriété de configuration D'une application Heroku sans avoir à modifier xyz.yml et le redéployer.

ce serait bien de supprimer complètement les fichiers de configuration Yaml dans mon application Rails, et de se fier autant que possible au stockage de la configuration dans ENV. Cela va de pair avec l' 12-facteur config principe.

cependant, il y a des compromis à faire pour passer D'un système basé sur Yaml à un système basé sur Yaml. gestion de la configuration en fonction D'un facteur Heroku/12.

  • c'est vrai qu'une prolifération des déploiements (aq, stade, prod, dev, démo, laboratoires) peut conduire à une prolifération de fichiers Yaml, il est très facile de copier-coller pour créer un nouveau profil de configuration. Je ne vois pas comment "copier" les profils de configuration d'un déploiement à un autre dans Heroku.
  • stocker les données de configuration dans le repo signifie que, dans le cas D'Heroku, déployer et configurer et application sont réalisées en une seule opération. Si je devais déplacer ma configuration hors des fichiers Yaml et dans les variables ENV, je devrais configurer mon application dans une étape séparée après le déploiement.

j'aimerais entendre des gens qui ont utilisé une configuration de style à 12 facteurs dans leurs applications privées, et comment ils ont géré de nombreuses variables de configuration dans de nombreux déploiements.

  • Comment configurer rapidement un nouveau déploiement?
  • où conservez-vous Votre source autorisée de variables de configuration, si ce n'est le repo? Comment distribuez-vous parmi les développeurs?

Merci!

18
demandé sur maxenglander 2012-07-05 01:04:11

3 réponses

vous pouvez accomplir cela relativement facilement avec quelques scripts shell simples, itérer les variables existantes via heroku config ou heroku release: info v99, et ensuite définir heroku config: set k=v -- app

mais si c'est un problème/douleur/friction peut-être que vous avez trop à l'intérieur de votre configuration env var.

4
répondu Mâtt Frëëman 2016-11-19 04:10:48

ce que J'utilise habituellement C'est Yaml en utilisant L'ENV et provide par défaut. Par exemple, YAML peut être ERB'ed heureux d'inclure vos vars ENV:

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

vous devez juste vous assurer que vous chargez le Yaml avec ERB quand vous le lisez:

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

En faisant cela, votre code fonctionne très bien en dev, mais vous permet également de définir config vars dans l'environnement.

10
répondu Neil Middleton 2012-07-05 14:40:08

Un peu de retard de réponse, mais je crois que c'est ce que vous cherchez.

j'ai développé un joyau appelé settei, vous permettant d'utiliser les fichiers YAML pour configurer l'application. Cependant le gem va sérialiser le fichier YAML comme variable d'environnement pendant le déploiement. De cette façon, on obtient le meilleur des deux mondes: YAML pour la facilité de gestion/création d'environnement dérivé, et ENV pour la conformité à 12 facteurs.

0
répondu lulalala 2018-03-09 03:36:55