- 2008-05-24 (Sat) 15:46
- Ruby on Rails
Photo by mondopiccolo
Capistranoではdeployしても、前のソースが残っているために、すぐに前のバージョンに戻せますが、データベースはそうはいきません。
そこで、deploy:migrationsを実行する前に自動でDBのバックアップを取るようなタスクを探してみました。
MySQL専用ですが、これでローカルのbackupsというディレクトリに、migration実行前のダンプがダウンロードされます。
require 'yaml'
desc "Backup the remote production database"
task :backup, :roles => :db, :only => { :primary => true } do
filename = "#{application}.dump.#{Time.now.to_i}.sql.bz2"
file = "/tmp/#{filename}"
on_rollback { delete file }
db = YAML::load(ERB.new(IO.read(File.join(File.dirname(__FILE__), 'database.yml'))).result)['production']
run "mysqldump -u #{db['username']} --password=#{db['password']} #{db['database']} | bzip2 -c > #{file}" do |ch, stream, data|
puts data
end
backup_dir = File.dirname(__FILE__) + "/../backups/"
`mkdir -p #{backup_dir}` unless File.exists?(backup_dir)
get file, "#{backup_dir}/#{filename}"
run "rm #{file}"
end
desc "Backup the database before running migrations"
task :before_migrate do
backup
end
Related posts
masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社 PingKingやニフティ アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立。現在、米ベルビュー在住。
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://blog.masuidrive.jp/index.php/2008/05/24/automaticall-backup-before-migrations-on-capistrano/trackback/
- Listed below are links to weblogs that reference
- Capistranoでmigrationsする前に自動でバックアップ from @masuidrive blog