【发布时间】:2010-10-05 11:48:18
【问题描述】:
我目前使用下面的脚本来备份网站,但它可以大大改善!请问您能否提出任何改进或替代解决方案?
目前,我只在达到大量数量后才删除项目 - 这并不好。有谁知道我如何删除一个月前的项目,或者在有 50 个备份时开始删除并首先开始删除最旧的项目?
require 'find'
require 'ftools'
namespace :db do desc "Backup the database to a file. Options: DIR=base_dir
RAILS_ENV=development MAX=20"
task :backup => [:environment] do
datestamp = Time.now.strftime("%d-%m-%Y_%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}_dump.sql.gz")
File.makedirs(backup_folder)
db_config = ActiveRecord::Base.configurations[RAILS_ENV]
sh "mysqldump -u #{db_config['username'].to_s} #{'-p' if db_config[
'password']}#{db_config['password'].to_s} --opt #{db_config['database']} |
gzip -c > #{backup_file}"
dir = Dir.new(backup_base)
all_backups = (dir.entries - ['.', '..']).sort.reverse
puts "Created backup: #{backup_file}"
max_backups = ENV["MAX"] || 10000000
unwanted_backups = all_backups[max_backups.to_i..-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
【问题讨论】:
-
在我看来您的脚本已经支持“从 50 个项目开始删除并首先删除最旧的项目”,只需传递 MAX=50 参数即可。
-
对于从 Google 来到这里的人,请查看 backup gem。
标签: mysql ruby-on-rails rake