Class: Shnell::Backup::BackupScript

Inherits:
Object
  • Object
show all
Includes:
Actions::Ftp, Config
Defined in:
lib/shnell/backup.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Actions::Ftp

#ftp_get, #ftp_put

Methods included from Config

#config, #db_credentials, #db_password, #db_user, #ftp_host, #ftp_password, #ftp_user, #read_config, #write_config

Constructor Details

#initialize(service) ⇒ BackupScript

Returns a new instance of BackupScript.



28
29
30
31
32
33
34
35
36
# File 'lib/shnell/backup.rb', line 28

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



12
13
14
15
16
17
18
# File 'lib/shnell/backup.rb', line 12

def backup(name, &block)
  backup = self.new(name)
  backup.prepare
  backup.instance_eval(&block)
  backup.backup!
  backup.finish
end

.restore(name, &block) ⇒ Object



20
21
22
23
24
25
# File 'lib/shnell/backup.rb', line 20

def restore(name, &block)
  backup = self.new(name)
  backup.instance_eval(&block)
  backup.restore!
  backup.finish
end

Instance Method Details

#backup!Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/shnell/backup.rb', line 50

def backup!
  @directories.each do |filename|
    report :directory, filename
    file = File.join(@service_root, filename)
    dirname = File.join(@tempdir, File.dirname(filename))
    backup_cmd "mkdir -p #{dirname}" unless File.exists?(dirname)
    backup_cmd "cp -r #{file} #{dirname}/"
  end
  @databases.each do |database|
    report :database, database
    backup_cmd "mysqldump #{db_credentials} #{database} > #{File.join(@tempdir, "#{database}.sql")}"
  end
  backup_cmd "tar -C /tmp -cjf #{@tarball} #{@service_name}"
  ftp_put @tarball
end

#database(database = @database) ⇒ Object



46
47
48
# File 'lib/shnell/backup.rb', line 46

def database(database = @database)
  @databases << database
end

#directory(filename) ⇒ Object



42
43
44
# File 'lib/shnell/backup.rb', line 42

def directory(filename)
  @directories << filename
end

#finishObject



82
83
84
85
# File 'lib/shnell/backup.rb', line 82

def finish
  backup_cmd "rm -rf #{@tempdir}" if File.exists?(@tempdir)
  backup_cmd "rm #{@tarball}" if File.exists?(@tarball)
end

#prepareObject



38
39
40
# File 'lib/shnell/backup.rb', line 38

def prepare
  backup_cmd "mkdir -p #{@tempdir}"
end

#restore!Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/shnell/backup.rb', line 66

def restore!
  ftp_get File.basename(@tarball), "/tmp" do
    backup_cmd "tar -C /tmp -xf #{@tarball}"
    @databases.each do |database|
      report :database, database
      backup_cmd "mysql -u#{db_user} #{"-p#{db_password}" if db_password != ''} #{database} < #{File.join(@tempdir, "#{database}.sql")}"
    end
    @directories.each do |filename|
      report :directory, filename
      source = File.join(@tempdir, filename)
      dest   = File.join(@service_root, filename)
      backup_cmd "cp -r #{source} #{dest}"
    end
  end
end