我正在使用rails和capistrano与登台和生产服务器。我需要能够在部署到登台时将生产数据库复制到登台数据库。有没有一种简单的方法可以实现这一目标?
我想过用mysql做这件事,比如:
before "deploy:migrate" do
run "mysqldump -u root #{application}_production > output.sql"
run "mysql -u root #{application}_staging < output.sql"
end
(我没有测试过这个顺便说一句,所以不确定它是否会起作用) 但是如果有另一种方式会更容易/更好。
感谢您的帮助
答案 0 :(得分:3)
这也是一种快速的方法。这使用SSH远程命令和管道来避免临时文件。
mysql -e 'DROP DATABASE stag_dbname;'
ssh prod.foo.com mysqldump -uprodsqluser -pprodsqlpw prod_dbname | gzip -c | gunzip -c | mysql stag_dbname
答案 1 :(得分:3)
这是我的部署代码段:
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"
答案 2 :(得分:2)
我这样做 - 它真的很有用。以下链接解释了......
http://c.kat.pe/post/capistrano-task-for-loading-production-data-into-your-development-database/
或
http://blog.robseaman.com/2008/12/2/production-data-to-development
答案 3 :(得分:0)
mysql -e 'DROP DATABASE stag_dbname;'
ssh prod.foo.com mysqldump -u prodsqluser
这可能不起作用。至少它不适用于PostgreSQL。
以上文章的工作链接