Sha256: 8cb622f2172e84c6a83a87b4a2c72b6dc0f8333505efd6fa8b63d8c1d356c759

Contents?: true

Size: 1.28 KB

Versions: 6

Compression:

Stored size: 1.28 KB

Contents

require 'find'

BACKUP_DIR = "db"
RAILS_ENV = "development" # TODO improve :D
MAX_BACKUPS = 5

# Source: http://blog.craigambrose.com/articles/2007/03/01/a-rake-task-for-database-backups
namespace :db do  
  desc "Backup the database to a file." 
  task :backup => [:environment] do
    datestamp = Time.now.strftime("%Y-%m-%d_%H-%M-%S")
    base_path = BACKUP_DIR || "db" 
    backup_base = File.join(base_path, 'backup')
    backup_folder = File.join(backup_base, datestamp)
    backup_file = File.join(backup_folder, "#{RAILS_ENV}_dump.sql.gz")
    FileUtils.mkdir_p(backup_folder)
    db_config = ActiveRecord::Base.configurations[RAILS_ENV]
    sh "mysqldump -u #{db_config['username']} -p#{db_config['password']} -Q --add-drop-database --opt #{db_config['database']} | gzip -c > #{backup_file}"
    dir = Dir.new(backup_base)
    all_backups = dir.entries[2..-1].sort.reverse
    puts "Created backup: #{backup_file}"
    max_backups = MAX_BACKUPS || 20
    unwanted_backups = all_backups[max_backups..-1] || []
    for unwanted_backup in unwanted_backups
      FileUtils.rm_rf(File.join(backup_base, unwanted_backup))
      puts "deleted #{unwanted_backup}" 
    end
    puts "Deleted #{unwanted_backups.length} backups, #{all_backups.length - unwanted_backups.length} backups available" 
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
fidius-cvedb-0.0.8 lib/tasks/db_backup.rake
fidius-cvedb-0.0.7 lib/tasks/db_backup.rake
fidius-cvedb-0.0.6 lib/tasks/db_backup.rake
fidius-cvedb-0.0.5 lib/tasks/db_backup.rake
fidius-cvedb-0.0.3 lib/tasks/db_backup.rake
fidius-cvedb-0.0.2 lib/tasks/db_backup.rake