Kopieren Sie die Produktionsdatenbank in das Staging Capistrano
-
28-09-2019 - |
Frage
Ich verwende Rails und Capistrano mit einem Staging- und Produktionsserver. Ich muss in der Lage sein, die Produktionsdatenbank in die Staging -Datenbank zu kopieren, wenn ich mich für die Staging bereitstellen kann. Gibt es eine einfache Möglichkeit, dies zu erreichen?
Ich habe darüber nachgedacht, dies mit MySQL und so ähnlich zu tun:
before "deploy:migrate" do
run "mysqldump -u root #{application}_production > output.sql"
run "mysql -u root #{application}_staging < output.sql"
end
(Ich habe diese übrigens nicht getestet, also nicht sicher, ob es überhaupt funktionieren würde), aber es wäre einfacher / besser, wenn es einen anderen Weg gäbe.
Danke für jede Hilfe
Lösung
Ich mache das - es ist wirklich nützlich. Hier sind Links, die erklären, wie ...
http://c.kat.pe/post/capistrano-task-for-loading-production-datainto-your-development-database/
oder
http://blog.robseaman.com/2008/12/2/production-data-te-development
Andere Tipps
Dies ist auch eine schnelle Möglichkeit, dies zu tun. Damit werden SSH -Remote -Befehle und -Pipes verwendet, um TEMP -Dateien zu vermeiden.
mysql -e 'DROP DATABASE stag_dbname;'
ssh prod.foo.com mysqldump -uprodsqluser -pprodsqlpw prod_dbname | gzip -c | gunzip -c | mysql stag_dbname
Hier ist mein Bereitstellungsausschnitt:
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"