Cómo administrar Rails database.yml

82

¿Cuál es la mejor manera de manejar Rails database.yml si varias personas están trabajando en el proyecto y las ubicaciones de la base de datos son diferentes (el socket en particular)?

phillee
fuente
2
Aclaración: me gustaría que esto funcionara con Capistrano, que verifica desde svn, así que no creo que ignore funcione.
phillee
1
Agregué dos pasos más para el caso Capistrano.
James A. Rosen

Respuestas:

160

Primero, vaya database.ymla un archivo de plantilla.

Si estás en Git:

git mv config/database.yml config/database.yml.example
git commit -m "moved database.yml to an example file"

O, si está en Subversion:

svn move config/database.yml config/database.yml.example
svn ci -m "moved database.yml to an example file"

En segundo lugar, ignore la versión .yml.

Si estás en Git:

cat > .gitignore
config/database.yml

git add .gitignore
git commit -m "ignored database.yml"

Si está en Subversion:

svn propset svn:ignore config "database.yml"

En tercer lugar, instale ¿Dónde está su database.yml, amigo? :

script/plugin install git://github.com/technicalpickles/wheres-your-database-yml-dude

Ese complemento alerta a los desarrolladores antes de que se ejecuten las tareas de Rake si no han creado su propia versión local de config/database.yml.

En cuarto lugar, configure una tarea de implementación de Capistrano:

# in RAILS_ROOT/config/deploy.rb:
after 'deploy:update_code', 'deploy:symlink_db'

namespace :deploy do
  desc "Symlinks the database.yml"
  task :symlink_db, :roles => :app do
    run "ln -nfs #{deploy_to}/shared/config/database.yml #{release_path}/config/database.yml"
  end
end

En quinto lugar, cargue la versión del servidor de database.yml:

scp config/database.yml user@my_server.com:/path_to_rails_app/shared/config/database.yml
James A. Rosen
fuente
8
Es costumbre (aunque de ninguna manera es obligatorio) "aceptar" la respuesta que le resulte más útil. Creo que incluso obtienes una insignia por tu primera aceptación.
James A. Rosen
3
mi mal - votó a favor pero no vi el cheque. hecho y gracias!
phillee
Tuve que cambiar después de 'deploy: update_code', 'deploy: symlink_db' a antes de 'deploy: assets: precompile', 'deploy: symlink_db' y luego funcionó.
joshua.paling
Todo funciona, excepto el quinto paso. Dice que no existe tal directorio, pero está ahí.
Sebastialonso
Solo una nota importante, sugiero usar en su cat >> .gitignorelugar. Ya que volará su archivo existente de lo contrario ...
sijpkes
16

En Capistrano 3, en lugar de agregar la nueva tarea, puede simplemente hacer:

set :linked_files, %w{config/database.yml}
Martín Sommer
fuente
0

Además de las respuestas anteriores, escribí una tarea de rake similar a "¿Dónde está tu database.yml, amigo?", Pero que permite mantener ejemplos de plantillas de cualquier archivo de configuración. Compruébalo: https://github.com/Velid/exemplify

Como alternativa a escribir configuraciones de producción separadas y vincularlas a través de Capistrano, también sugeriría usar variables de entorno para sus credenciales:

password: <%= ENV['PROD_DATABASE_PASSWORD'] %>

Hay muchas herramientas útiles y formas de hacer esto disponibles.

contrabandista Flynn
fuente