Administrar la security de una aplicación de Rails de código abierto 3 almacenada en github

Nuevo en los Rails, de código abierto y pronto listo para implementar en un entorno de producción, tengo algunas consideraciones de security.

Cómo manejar la database.yml está cubierto bastante bien por, how-to-manage-rails-database-yml

Pero desde mi punto de vista, hay más ajustes de configuration en una aplicación de Rails normales que no deberían alojarse en un repository github público y desplegarse en producción, por ejemplo

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

Agregar config / **** / * a .gitignore no solo evitaría que los nuevos desarrolladores instalaran packages, db: create, db: migrate, rails server, sino también para mantener la configuration de producción actualizada si se trata de una nueva gem con un inicializador instalado

Otra posibilidad sería agregar un environment.yml con configuration sensible, como database.yml, donde la configuration sensible en los inicializadores será anulada?

Esto facilitará el inicio y el funcionamiento después de un process de pago limpio y el entorno de producción será fácil de mantener.

¿Alguna idea de cómo abordar mis problemas anteriormente?

Normalmente coloco datos "seguros" en estos files, que generalmente funcionan con fines de desarrollo. Pero en producción, enlace simbólicamente los files a otra location con capistrano, así:

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

Entonces, en el server de producción tengo un montón de files que anulan los files en control de fuente. Ni siquiera trabajo con una database.yml.example , solo una database.yml.example database.yml pnetworkingeterminada sana que los desarrolladores astringn utilizar en desarrollo y testing.

Para configuraciones individuales, como las keys API, normalmente creo una config/settings.yml y las leo desde el interior del inicializador:

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