Copia il database di produzione su Staging Capistrano
-
28-09-2019 - |
Domanda
Sto usando Rails e Capistrano con un server di stadiazione e produzione. Devo essere in grado di copiare il database di produzione nel database di stadiazione quando distribuisco alla messa in scena. C'è un modo semplice per raggiungere questo obiettivo?
Ho pensato di farlo con mysql e qualcosa del tipo:
before "deploy:migrate" do
run "mysqldump -u root #{application}_production > output.sql"
run "mysql -u root #{application}_staging < output.sql"
end
(Non ho testato questo BTW, quindi non sono sicuro che funzionerebbe nemmeno) ma sarebbe più facile / migliore se ci fosse un altro modo.
Grazie per qualsiasi aiuto
Soluzione
Lo faccio - è davvero utile. Ecco link che spiegano come ...
http://c.kat.pe/post/capistrano--task-for-moading-production-data-into-your-development-database/
o
http://blog.robseaman.com/2008/12/2/production-data-to-development
Altri suggerimenti
Questo è anche un modo rapido per farlo. Questo utilizza comandi e tubi remoti SSH per evitare i file di temperatura.
mysql -e 'DROP DATABASE stag_dbname;'
ssh prod.foo.com mysqldump -uprodsqluser -pprodsqlpw prod_dbname | gzip -c | gunzip -c | mysql stag_dbname
Ecco il mio frammento di distribuzione:
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"