Ruby on rails 用于备份和恢复数据库的Rake任务

Ruby on rails 用于备份和恢复数据库的Rake任务,ruby-on-rails,database,Ruby On Rails,Database,我正在从事Rails项目,有时在家编程,有时在工作。在我的开发过程中,我向数据库添加数据,我真的需要一种方法来同步家庭和工作中的数据库 我正在考虑在Rails应用程序中备份/恢复整个数据库的Rake任务。 还有其他方法吗?我使用一个脚本将数据库转储到特定位置,第二个脚本获取转储并使用它还原指定的数据库。我使用where gem计划每日备份(通过调用第一个脚本),方法是将其放入schedule.rb文件: every :day, :at => "05:00" do command

我正在从事Rails项目,有时在家编程,有时在工作。在我的开发过程中,我向数据库添加数据,我真的需要一种方法来同步家庭和工作中的数据库

我正在考虑在Rails应用程序中备份/恢复整个数据库的Rake任务。

还有其他方法吗?

我使用一个脚本将数据库转储到特定位置,第二个脚本获取转储并使用它还原指定的数据库。我使用where gem计划每日备份(通过调用第一个脚本),方法是将其放入schedule.rb文件:

  every :day, :at => "05:00" do
    command "/var/www/current/script/db_backup.sh -n #{@db_name}"
  end
脚本的确切内容取决于您使用的数据库。当我使用postgreSQL时,备份脚本在确定转储的正确位置后,运行pg_dump:

pg_dump -F t -U username -f file_location<timestamp>.dat database_name
如果您使用的是其他数据库,这些工具显然会有所不同,但大多数数据库都支持某种形式的备份和恢复。

编写一个rake任务:

namespace :db do
  task :backup do
    system "mysqldump --opt --user=root --password rose userdetails> xyz.sql"
  end

  task :restore do
    system "mysqldump --user=root --password  < xyz.sql"
  end
end
名称空间:db do
任务:备份
系统“mysqldump--opt--user=root--password-rose-userdetails>xyz.sql”
结束
任务:还原do
系统“mysqldump--user=root--password

通过
rake db:backup
您将获得可以提交到git/svn的sql,并且一旦您在家进行恢复,就可以拉它并运行
rake db:restore

这是一个很好的解决方案,作为额外的奖励,它可以从database.yml文件中读取用户名/密码。还原任务的唯一问题是mysqldump为每个表写入一个
DROP TABLE
,然后
CREATE TABLE…
。如果您编写添加表的迁移,然后在没有正确向下迁移的情况下运行
rake db:restore
,则不会删除其他表(因为mysqldump不会写入这些表)。因此,如果您想要一个“真实”的恢复,您应该首先删除所有现有的表,然后加载.sql文件。
namespace :db do
  task :backup do
    system "mysqldump --opt --user=root --password rose userdetails> xyz.sql"
  end

  task :restore do
    system "mysqldump --user=root --password  < xyz.sql"
  end
end