Bastos

let’s code!


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]

Published by Bastos, on June 12th, 2007 at 6:12 pm. Filled under: rails, rake, ruby, tips | No Comments