Rake Task para backup de DB em Rails
Crie um backup.rake no lib/tasks :
require 'find'
namespace :db do
desc "Backup the database to a file. Options: DIR=base_dir RAILS_ENV=production"
task :backup => [:environment] do
datestamp = Time.now.strftime("%Y-%m-%d")
hourstamp = Time.now.strftime("%H-%M-%S")
base_path = ENV["DIR"] || "db"
backup_base = File.join(base_path, 'backup')
backup_folder = File.join(backup_base, datestamp)
backup_file = File.join(backup_folder, "#{RAILS_ENV}_#{hourstamp}_dump.sql")
File.makedirs(backup_folder)
db_config = ActiveRecord::Base.configurations[RAILS_ENV]
sh "mysqldump -u #{db_config['username']} -p#{db_config['password']} #{db_config['database']} > #{backup_file} ; bzip2 -z #{backup_file}"
dir = Dir.new(backup_base)
all_backups = dir.entries[2..-1].sort.reverse
puts "Created backup: #{backup_file}.bz2"
end
end
Execute com:
rake db:backup
Levemente modificada dessa aqui.
A minha task usa bzip, não apaga backups antigos e coloca os backups do mesmo dia em uma mesma pasta, cada arquivo tem a hora/minuto/segundo do backup.
Todo: Apagar pastas antigas em certa data
[update]Melhorada aqui.[/update]