liquid_backup 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/liquid_backup/job/modules/database_module.rb +45 -0
- data/lib/liquid_backup/job/modules/folder_module.rb +44 -0
- data/lib/liquid_backup/job.rb +31 -52
- data/lib/liquid_backup/manager.rb +8 -2
- data/spec/backup_spec.rb +13 -4
- metadata +6 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module LiquidBackup
|
2
|
+
class Job
|
3
|
+
module Database
|
4
|
+
def Database.included(parent)
|
5
|
+
parent.class_eval <<-CALLBACK
|
6
|
+
include Database::StepCallbacks
|
7
|
+
set_callback :upload, :before do |object|
|
8
|
+
compress_database
|
9
|
+
end
|
10
|
+
|
11
|
+
set_callback :backup, :before do |object|
|
12
|
+
FileUtils.mkdir_p File.join(current_backup_path,'databases')
|
13
|
+
end
|
14
|
+
|
15
|
+
set_callback :upload, :after do
|
16
|
+
FileUtils.rm_rf(File.join(current_backup_path,'databases'))
|
17
|
+
end
|
18
|
+
CALLBACK
|
19
|
+
end
|
20
|
+
|
21
|
+
module StepCallbacks
|
22
|
+
def compress_database
|
23
|
+
return unless @_fire_database_callbacks
|
24
|
+
source = File.join(current_backup_path,'databases')
|
25
|
+
destination = File.join(current_backup_path,'databases.tar.gz')
|
26
|
+
|
27
|
+
compress(source, destination)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def database(name, options = {})
|
32
|
+
@_fire_database_callbacks = true
|
33
|
+
|
34
|
+
destination = File.join(current_backup_path,'databases', name + '_' + Date.today.strftime("%Y%m%d%H%M%S") + '.sql')
|
35
|
+
|
36
|
+
`/usr/local/pgsql/bin/pg_dump -U postgres #{name} > #{destination}`
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
include LiquidBackup::Job::Database
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module LiquidBackup
|
2
|
+
class Job
|
3
|
+
module Folder
|
4
|
+
def Folder.included(parent)
|
5
|
+
parent.class_eval <<-CALLBACK
|
6
|
+
include Folder::StepCallbacks
|
7
|
+
set_callback :upload, :before do |object|
|
8
|
+
compress_folder
|
9
|
+
end
|
10
|
+
|
11
|
+
set_callback :backup, :before do |object|
|
12
|
+
FileUtils.mkdir_p File.join(current_backup_path,'folders')
|
13
|
+
end
|
14
|
+
|
15
|
+
set_callback :upload, :after do
|
16
|
+
FileUtils.rm_rf(File.join(current_backup_path,'folders'))
|
17
|
+
end
|
18
|
+
CALLBACK
|
19
|
+
end
|
20
|
+
|
21
|
+
module StepCallbacks
|
22
|
+
def compress_folder
|
23
|
+
return unless @_fire_database_callbacks
|
24
|
+
|
25
|
+
source = File.join(current_backup_path,'folders')
|
26
|
+
destination = File.join(current_backup_path,'folders.tar.gz')
|
27
|
+
|
28
|
+
compress(source, destination)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def folder(path, options = {})
|
33
|
+
@_fire_database_callbacks = true
|
34
|
+
|
35
|
+
source = File.join(application_directory,'current',path)
|
36
|
+
destination = File.join(current_backup_path,'folders',path.gsub('/','_') + '.tar.gz')
|
37
|
+
|
38
|
+
compress(source, destination)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
include LiquidBackup::Job::Folder
|
43
|
+
end
|
44
|
+
end
|
data/lib/liquid_backup/job.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
require 'active_support/callbacks'
|
3
|
+
|
1
4
|
class LiquidBackup::Job
|
5
|
+
include ActiveSupport::Callbacks
|
6
|
+
|
2
7
|
attr_accessor :script_path
|
3
8
|
attr_accessor :application_directory
|
4
9
|
attr_accessor :backups_path
|
@@ -8,51 +13,50 @@ class LiquidBackup::Job
|
|
8
13
|
attr_accessor :destination_handler
|
9
14
|
attr_accessor :destination_location
|
10
15
|
|
16
|
+
define_callbacks :upload, :backup
|
17
|
+
|
11
18
|
def initialize(script_path)
|
12
19
|
@script_path = script_path
|
13
20
|
@application_directory = script_path.gsub('/current/config/backup.rb','')
|
14
21
|
@backups_path = File.join(application_directory,'backups')
|
15
22
|
@current_backup_path = File.join(backups_path,'current')
|
16
23
|
@previous_backups_path = File.join(backups_path,'previous')
|
17
|
-
|
24
|
+
end
|
25
|
+
|
26
|
+
set_callback :backup, :before do
|
18
27
|
create_backup_folders
|
28
|
+
archive
|
19
29
|
end
|
20
30
|
|
21
31
|
def perform
|
22
|
-
archive
|
23
|
-
|
24
32
|
eval(File.read(script_path), binding)
|
25
|
-
|
26
|
-
finalize
|
27
|
-
upload
|
28
33
|
end
|
29
34
|
|
30
35
|
def backup
|
31
|
-
|
36
|
+
run_callbacks :backup do
|
37
|
+
yield
|
38
|
+
end
|
39
|
+
|
40
|
+
run_callbacks :upload do
|
41
|
+
upload
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
set_callback :upload, :after do
|
46
|
+
cleanup
|
32
47
|
end
|
33
48
|
|
34
49
|
private
|
35
|
-
|
36
50
|
def archive
|
37
51
|
archive_files = Dir.glob(File.join(current_backup_path,'*.tar.gz'))
|
38
52
|
last_run = File.mtime(current_backup_path).strftime("%Y%m%d%H%M%S")
|
39
53
|
last_run_destination = File.join(previous_backups_path,last_run)
|
40
54
|
|
41
|
-
|
55
|
+
create_folder last_run_destination
|
42
56
|
FileUtils.mv archive_files, last_run_destination
|
43
57
|
end
|
44
58
|
|
45
|
-
def finalize
|
46
|
-
finalize_folders
|
47
|
-
finalize_databases
|
48
|
-
|
49
|
-
cleanup
|
50
|
-
end
|
51
|
-
|
52
59
|
def cleanup
|
53
|
-
FileUtils.rm_rf File.join(current_backup_path,'folders')
|
54
|
-
FileUtils.rm_rf File.join(current_backup_path,'databases')
|
55
|
-
|
56
60
|
previous_backups = Dir.glob(File.join(previous_backups_path,'*')).sort
|
57
61
|
|
58
62
|
if previous_backups.length > LiquidBackup::KEEP
|
@@ -61,20 +65,6 @@ class LiquidBackup::Job
|
|
61
65
|
FileUtils.rm_rf backups_to_prune
|
62
66
|
end
|
63
67
|
end
|
64
|
-
|
65
|
-
def finalize_folders
|
66
|
-
source = File.join(current_backup_path,'folders')
|
67
|
-
destination = File.join(current_backup_path,'folders.tar.gz')
|
68
|
-
|
69
|
-
compress(source, destination)
|
70
|
-
end
|
71
|
-
|
72
|
-
def finalize_databases
|
73
|
-
source = File.join(current_backup_path,'databases')
|
74
|
-
destination = File.join(current_backup_path,'databases.tar.gz')
|
75
|
-
|
76
|
-
compress(source, destination)
|
77
|
-
end
|
78
68
|
|
79
69
|
def upload
|
80
70
|
files_to_backup = Dir.glob(File.join(current_backup_path,'*.tar.gz'))
|
@@ -86,28 +76,17 @@ class LiquidBackup::Job
|
|
86
76
|
end
|
87
77
|
|
88
78
|
def create_backup_folders
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
FileUtils.mkdir_p
|
79
|
+
create_folder backups_path, current_backup_path, previous_backups_path
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_folder(*name)
|
83
|
+
name.each{|f| FileUtils.mkdir_p f}
|
94
84
|
end
|
95
85
|
|
96
86
|
def destination(name, location)
|
97
87
|
@destination_handler = name
|
98
88
|
@destination_location = location
|
99
89
|
end
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
destination = File.join(current_backup_path,'folders',path.gsub('/','_') + '.tar.gz')
|
104
|
-
|
105
|
-
compress(source, destination)
|
106
|
-
end
|
107
|
-
|
108
|
-
def database(name, options = {})
|
109
|
-
destination = File.join(current_backup_path,'databases', name + '_' + Date.today.strftime("%Y%m%d%H%M%S") + '.sql')
|
110
|
-
|
111
|
-
`/usr/local/pgsql/bin/pg_dump -U postgres #{name} > #{destination}`
|
112
|
-
end
|
113
|
-
end
|
90
|
+
end
|
91
|
+
|
92
|
+
Dir.glob(File.join(File.dirname(__FILE__),'job','modules','*_module.rb')).each {|s| require s}
|
@@ -3,17 +3,23 @@ class LiquidBackup::Manager
|
|
3
3
|
include Singleton
|
4
4
|
|
5
5
|
attr_accessor :backup_handler
|
6
|
+
attr_reader :backup_jobs
|
6
7
|
|
7
8
|
def initialize
|
8
9
|
@backup_handler = {}
|
10
|
+
@backup_jobs = []
|
9
11
|
end
|
10
12
|
|
11
13
|
def collect_jobs(pattern)
|
12
|
-
@backup_jobs = []
|
13
14
|
Dir.glob(pattern).each do |backupjob|
|
14
15
|
@backup_jobs << LiquidBackup::Job.new(backupjob)
|
15
16
|
end
|
16
|
-
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def perform_all
|
21
|
+
@backup_jobs.each {|j| j.perform}
|
22
|
+
self
|
17
23
|
end
|
18
24
|
|
19
25
|
def use(name, handler)
|
data/spec/backup_spec.rb
CHANGED
@@ -3,11 +3,20 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
describe LiquidBackup do
|
4
4
|
|
5
5
|
describe LiquidBackup::Manager do
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
before(:all) do
|
7
|
+
@jobs_path = File.join(File.dirname(__FILE__),'fs_root/home/**/current/config/backup.rb')
|
8
|
+
LiquidBackup::Manager.collect_jobs(@jobs_path)
|
9
9
|
|
10
|
-
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should store the list of jobs" do
|
13
|
+
LiquidBackup::Manager.collect_jobs(@jobs_path)
|
14
|
+
LiquidBackup::Manager.backup_jobs.should be_an(Array)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return itself to allow chaining" do
|
18
|
+
lbm = LiquidBackup::Manager.collect_jobs(@jobs_path)
|
19
|
+
lbm.should eql LiquidBackup::Manager.instance()
|
11
20
|
end
|
12
21
|
end
|
13
22
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Dan Williams
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-05 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -62,6 +62,8 @@ files:
|
|
62
62
|
- lib/liquid_backup.rb
|
63
63
|
- lib/liquid_backup/handler/s3.rb
|
64
64
|
- lib/liquid_backup/job.rb
|
65
|
+
- lib/liquid_backup/job/modules/database_module.rb
|
66
|
+
- lib/liquid_backup/job/modules/folder_module.rb
|
65
67
|
- lib/liquid_backup/manager.rb
|
66
68
|
- spec/backup_spec.rb
|
67
69
|
- spec/fs_root/home/user1/app1/production/current/public/system/important_files/file1.txt
|