Class: Shnell::Backup::BackupScript
Class Method Summary
collapse
Instance Method Summary
collapse
#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
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
|
#finish ⇒ Object
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
|
#prepare ⇒ Object
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
|