Class: Backup::BackupScript
- Inherits:
-
Object
- Object
- Backup::BackupScript
- Defined in:
- lib/backup.rb
Class Method Summary collapse
Instance Method Summary collapse
- #backup! ⇒ Object
- #database(database = @database) ⇒ Object
- #directory(filename) ⇒ Object
- #finish ⇒ Object
-
#initialize(service) ⇒ BackupScript
constructor
A new instance of BackupScript.
- #prepare ⇒ Object
- #restore! ⇒ Object
Constructor Details
#initialize(service) ⇒ BackupScript
Returns a new instance of BackupScript.
29 30 31 32 33 34 35 36 37 |
# File 'lib/backup.rb', line 29 def initialize(service) @service_root = service @service_name = File.basename(service) @database = @service_name.gsub(/[-\.]/, '_') @tempdir = File.join("/tmp", @service_name) @tarball = "#{@tempdir}.tar.bz2" @directories = [] @databases = [] end |
Class Method Details
.backup(name, &block) ⇒ Object
13 14 15 16 17 18 19 |
# File 'lib/backup.rb', line 13 def backup(name, &block) backup = self.new(name) backup.prepare backup.instance_eval(&block) backup.backup! backup.finish end |
.restore(name, &block) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/backup.rb', line 21 def restore(name, &block) backup = self.new(name) backup.instance_eval(&block) backup.restore! backup.finish end |
Instance Method Details
#backup! ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/backup.rb', line 53 def backup! @directories.each do |filename| filename = File.join(@service_root, filename) backup_cmd "cp -r #{filename} #{@tempdir}/" end @databases.each do |database| backup_cmd "mysqldump -u#{db_user} #{"-p#{db_password}" if db_password != ''} #{database} > #{File.join(@tempdir, "#{database}.sql")}" end backup_cmd "tar -C /tmp -cjf #{@tarball} #{@service_name}" Net::FTP.open(ftp_host) do |ftp| ftp.login ftp_user, ftp_password ftp.putbinaryfile @tarball end end |
#database(database = @database) ⇒ Object
48 49 50 51 |
# File 'lib/backup.rb', line 48 def database(database = @database) report :database, database @databases << database end |
#directory(filename) ⇒ Object
43 44 45 46 |
# File 'lib/backup.rb', line 43 def directory(filename) report :directory, filename @directories << filename end |
#finish ⇒ Object
86 87 88 89 |
# File 'lib/backup.rb', line 86 def finish backup_cmd "rm -rf #{@tempdir}" backup_cmd "rm #{@tarball}" end |
#prepare ⇒ Object
39 40 41 |
# File 'lib/backup.rb', line 39 def prepare backup_cmd "mkdir -p #{@tempdir}" end |
#restore! ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/backup.rb', line 68 def restore! inside "/tmp" do Net::FTP.open(ftp_host) do |ftp| ftp.login ftp_user, ftp_password ftp.getbinaryfile File.basename(@tarball) end end backup_cmd "tar -C /tmp -xf #{@tarball}" @databases.each do |database| backup_cmd "mysql -u#{db_user} #{"-p#{db_password}" if db_password != ''} #{database} < #{File.join(@tempdir, "#{database}.sql")}" end @directories.each do |filename| source = File.join(@tempdir, filename) dest = File.join(@service_root, filename) backup_cmd "cp -r #{source} #{dest}" end end |