2012-07-04 12 views
18

He disfrutado el uso de Rails en Heroku, y así puedo ajustar la propiedad de configuración de una aplicación Heroku sin tener que realizar un cambio en xyz.yml y volver a implementarlo.Administrar config en aplicaciones de 12 factores

Sería bueno deshacerse por completo de los archivos de configuración de Yaml en mi aplicación Rails, y confiar tanto en almacenar la configuración en ENV. Esto va junto con el principio 12-factor config.

Sin embargo, hay algunas concesiones en el cambio de una administración de configuración basada en Yaml a una basada en Heroku/12-factor.

  • Si bien es cierto que una proliferación de despliegues (QA, escenario, prod, dev, demo, laboratorios) puede dar lugar a una proliferación de archivos YAML, es muy fácil de copiar y pegar para crear un nuevo perfil de configuración. No veo una forma de 'copiar' los perfiles de configuración de una implementación a otra en Heroku.
  • Almacenar los datos de configuración en el repositorio significa que, en el caso de Heroku, la implementación, la configuración y la aplicación se realizan en una sola operación. Si tuviera que mover mi configuración de archivos Yaml a variables ENV, tendría que configurar mi aplicación en un paso separado después de la implementación.

Me gustaría saber de las personas que han utilizado la configuración de estilo de 12 factores en sus aplicaciones privadas, y cómo han administrado muchas variables de configuración en muchas implementaciones.

  • ¿Cómo se configura rápidamente una nueva implementación?
  • ¿Dónde guarda su fuente autorizada de variables de configuración, sino el repositorio? ¿Cómo se distribuye entre los desarrolladores?

Gracias!

Respuesta

4

Esto se puede hacer relativamente fácil con algunos shell scripts simples, repetir las variables existentes por medio de config heroku o heroku lanzamiento: información v99, y luego set config heroku: set k = v --app

Pero si es una problema/dolor/fricción quizás tengas demasiado dentro de tu configuración env var.

+1

No trabajo con Heroku, pero considero que 12 factor podría aplicarse a cualquier aplicación SaaS. Puedo crear un script de shell personalizado para crear esa configuración en mi entorno. Pero, después de este trasfondo, mi pregunta es: ¿no hay una preocupación de seguridad en hacer que mis valores de configuración, como los datos de acceso a la base de datos, se conviertan en env vars? –

10

Lo que normalmente uso es Yaml usando el ENV y proporciono valores predeterminados. Por ejemplo, YAML puede ERB'ed felices de incluir su ENV vars:

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

sólo tiene que asegurarse de que se carga el Yaml con ERB cuando lo lea:

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

Haciendo este código funciona bien en dev, pero también le permite configurar valores de configuración en el entorno.

0

Una respuesta tardía, pero creo que esto es lo que estás buscando.

Desarrollé una gema llamada settei, que le permite usar archivos YAML para configurar la aplicación. Sin embargo, la gema serializará el archivo YAML como una variable de entorno durante la implementación. De esta forma, se obtiene lo mejor de ambos mundos: YAML para facilitar la administración/crear entorno derivado y ENV para cumplimiento de 12 factores.

Cuestiones relacionadas