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

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"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top