2010-11-03 27 views
3

J'utilise des rails et capistrano avec un serveur de mise en scène et de production. Je dois être en mesure de copier la base de données de production dans la base de données de transfert lors du déploiement dans la zone de stockage intermédiaire. Y a-t-il un moyen facile d'accomplir cela?copier la base de données de production à staging capistrano

Je pensais à faire avec MySQL et quelque chose comme:

before "deploy:migrate" do 
    run "mysqldump -u root #{application}_production > output.sql" 
    run "mysql -u root #{application}_staging < output.sql" 
end 

(je ne l'ai pas testé ce BTW, donc pas sûr qu'il serait même travailler) mais il serait plus facile/mieux s'il y avait une autre façon.

Merci pour toute aide

+0

semble grande et vous avez une sauvegarde faire avec cela. – shingara

Répondre

3

Ceci est un moyen rapide de le faire aussi. Cela utilise des commandes à distance et des tuyaux SSH pour éviter les fichiers temporaires.

mysql -e 'DROP DATABASE stag_dbname;' 
ssh prod.foo.com mysqldump -uprodsqluser -pprodsqlpw prod_dbname | gzip -c | gunzip -c | mysql stag_dbname 
3

Voici mon extrait de déploiement:

namespace :deploy do 
    task :clone_production_database, :except => { :no_release => true } do 
    mysql_user = "username" 
    mysql_password = "s3C_re" 
    production_database = "production" 
    preview_database = "preview" 
    run "mysql -u#{mysql_user} -p#{mysql_password} --execute='CREATE DATABASE IF NOT EXISTS #{preview_database}';" 
    run "mysqldump -u#{mysql_user} -p#{mysql_password} #{production_database} | mysql -u#{mysql_user} -p#{mysql_password} #{preview_database}" 
    end 
end 
before "deploy:migrate", "deploy:clone_production_database"