backup 是一个非常强大的备份工具,用来备份数据库和文件十分方便,先来看一下支持情况:
由于条件所限,我只演示一下FTP方式备份,配置起来还是挺简单的:
#首先,安装backup: $ gem install backup #在项目目录下执行: $ backup generate --databases='mysql' --archives --storages='ftp' --compressors='gzip' --path='config'
把config目录下生成的config.rb重命名为backup.rb,我的配置如下:
database_yml = File.expand_path("../config/database.yml", __FILE__) RAILS_ENV = ENV['RAILS_ENV'] || 'development' require 'yaml' config = YAML.load_file(database_yml) Backup::Model.new(:my_backup, 'my backup') do archive :my_archive do |archive| archive.add File.expand_path("./public/system/") end database MySQL do |db| db.name = config[RAILS_ENV]["database"] db.username = config[RAILS_ENV]["username"] db.password = config[RAILS_ENV]["password"] db.host = config[RAILS_ENV]["host"] db.port = config[RAILS_ENV]["port"] db.socket = config[RAILS_ENV]["socket"] db.skip_tables = ['sessions'] db.additional_options = ['--quick', '--single-transaction'] end store_with FTP do |server| server.username = 'test' server.password = 'test' server.ip = '192.168.1.101' server.port = 21 server.path = '~/backups/' server.keep = 5 end compress_with Gzip do |compression| compression.best = true compression.fast = false end end
说明:
1、public/system/下是由paperclip上传的图片
2、FTP的配置信息最好也像数据库的配置那样,配置在另外一个yml文件中,并且这个文件不要放入版本控制系统中,我这只是一个测试所以无所谓
在lib/tasks目录下新建bakcup.rake如下:
namespace :db do desc "My Backup" task :backup do sh "backup perform --trigger my_backup --config_file 'config/backup.rb'" end end
在项目根目录下执行这条命令进行备份:
$ rake db:backup
配合whenever 自动备份效果更佳!
需要注意一下这个gem实际上并不是针对rails来开发的,它提供了一种命令行的方式来备份系统上的数据库和文件,所以你可以用它备份任何你想要备份的东西。
主要参考:
https://github.com/meskyanichi/backup/wiki
http://erik.debill.org/2011/03/26/csing-backup-with-rails