2010-12-10 12 views
7

Nuevo en rieles, de código abierto y pronto listo para su implementación en un entorno de producción, tengo algunas consideraciones de seguridad.Administración de la seguridad de una aplicación de rieles 3 de código abierto almacenada en github

cómo manejar la database.yml se cubre bastante bien por, how-to-manage-rails-database-yml

Pero desde mi punto de vista hay más valores de configuración de una aplicación de rieles normal que no debe estar alojado en un repositorio GitHub pública y desplegado a la producción, por ejemplo

  • devise.rb -> config.pepper
  • secret_token.rb -> Application.config.secret_token
  • Capistrano -> deploy.rb
  • ...

Adición de config/****/* a .gitignore no solo evitaría nuevos desarrolladores de instalación de paquete, db: create, db: migrate, rails server sino también para mantener la configuración de producción actualizada si se trata de una nueva gema con un inicializador instalar LED.

Otra posibilidad sería agregar un environment.yml con configuración sensible, como database.yml, donde se anulará la configuración confidencial en los inicializadores?

Esto facilitará el inicio y el funcionamiento después de una comprobación limpia y el entorno de producción será fácil de mantener.

Alguna idea de cómo abordar mis problemas anteriormente?

Respuesta

5

Normalmente pongo datos "seguros" en estos archivos, que generalmente funcionan con fines de desarrollo. Pero en la producción que enlazar simbólicamente los archivos a otra ubicación con Capistrano, así:

invoke_command "ln -sf #{shared_path}/database.yml #{release_path}/config/database.yml" 

Así, en el servidor de producción Tengo un montón de archivos que tienen preferencia sobre los archivos de control de código fuente. Ni siquiera trabajo con database.yml.example, solo algunos de los valores por defecto database.yml que los desarrolladores acuerdan usar en desarrollo y prueba.

Para los ajustes individuales, como claves de la API, por lo general crear un config/settings.yml y leerlos desde el interior del inicializador:

SETTINGS = YAML.load(IO.read(Rails.root.join("config", "settings.yml"))) 
YourApp::Application.config.secret_token = SETTINGS["secret_token"] 
+0

Gracias por su respuesta rápida y se siente bien que su solución es similar a mi imaginario. ¿Hay alguna otra configuración sensible en un sitio de vanilla rails? Voy a probar tu solución, es simple y creo que se ajustará a mis necesidades para empezar. – orjan

+0

No sé cómo el enlace simbólico puede funcionar para usted cuando está ejecutando "implementación de tapa: migraciones" ya que se están ejecutando contra el lanzamiento y no el directorio actual. Necesitaba cambiar el enlace simbólico para> ejecutar "ln -nfs # {shared_path} /config/database.yml # {release_path} /config/database.yml" orjan

+0

Woops, tu derecha :) – iain

Cuestiones relacionadas