backup 3.0.2 → 3.0.3.build.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/backup +12 -190
- metadata +7 -191
- data/.gitignore +0 -2
- data/.infinity_test +0 -7
- data/.rspec +0 -3
- data/Gemfile +0 -17
- data/Gemfile.lock +0 -88
- data/LICENSE.md +0 -24
- data/README.md +0 -236
- data/backup.gemspec +0 -41
- data/lib/backup.rb +0 -148
- data/lib/backup/archive.rb +0 -54
- data/lib/backup/cli.rb +0 -50
- data/lib/backup/compressor/base.rb +0 -17
- data/lib/backup/compressor/gzip.rb +0 -61
- data/lib/backup/configuration/base.rb +0 -15
- data/lib/backup/configuration/compressor/base.rb +0 -10
- data/lib/backup/configuration/compressor/gzip.rb +0 -23
- data/lib/backup/configuration/database/base.rb +0 -18
- data/lib/backup/configuration/database/mongodb.rb +0 -37
- data/lib/backup/configuration/database/mysql.rb +0 -37
- data/lib/backup/configuration/database/postgresql.rb +0 -37
- data/lib/backup/configuration/database/redis.rb +0 -35
- data/lib/backup/configuration/encryptor/base.rb +0 -10
- data/lib/backup/configuration/encryptor/gpg.rb +0 -17
- data/lib/backup/configuration/encryptor/open_ssl.rb +0 -26
- data/lib/backup/configuration/helpers.rb +0 -54
- data/lib/backup/configuration/notifier/base.rb +0 -39
- data/lib/backup/configuration/notifier/mail.rb +0 -52
- data/lib/backup/configuration/storage/base.rb +0 -18
- data/lib/backup/configuration/storage/cloudfiles.rb +0 -21
- data/lib/backup/configuration/storage/dropbox.rb +0 -25
- data/lib/backup/configuration/storage/ftp.rb +0 -25
- data/lib/backup/configuration/storage/rsync.rb +0 -25
- data/lib/backup/configuration/storage/s3.rb +0 -25
- data/lib/backup/configuration/storage/scp.rb +0 -25
- data/lib/backup/configuration/storage/sftp.rb +0 -25
- data/lib/backup/database/base.rb +0 -33
- data/lib/backup/database/mongodb.rb +0 -137
- data/lib/backup/database/mysql.rb +0 -104
- data/lib/backup/database/postgresql.rb +0 -111
- data/lib/backup/database/redis.rb +0 -105
- data/lib/backup/encryptor/base.rb +0 -17
- data/lib/backup/encryptor/gpg.rb +0 -78
- data/lib/backup/encryptor/open_ssl.rb +0 -67
- data/lib/backup/finder.rb +0 -39
- data/lib/backup/logger.rb +0 -80
- data/lib/backup/model.rb +0 -249
- data/lib/backup/notifier/base.rb +0 -29
- data/lib/backup/notifier/binder.rb +0 -32
- data/lib/backup/notifier/mail.rb +0 -141
- data/lib/backup/notifier/templates/notify_failure.erb +0 -31
- data/lib/backup/notifier/templates/notify_success.erb +0 -16
- data/lib/backup/storage/base.rb +0 -67
- data/lib/backup/storage/cloudfiles.rb +0 -95
- data/lib/backup/storage/dropbox.rb +0 -82
- data/lib/backup/storage/ftp.rb +0 -114
- data/lib/backup/storage/object.rb +0 -45
- data/lib/backup/storage/rsync.rb +0 -100
- data/lib/backup/storage/s3.rb +0 -108
- data/lib/backup/storage/scp.rb +0 -105
- data/lib/backup/storage/sftp.rb +0 -106
- data/lib/backup/version.rb +0 -72
- data/lib/templates/archive +0 -4
- data/lib/templates/compressor/gzip +0 -4
- data/lib/templates/database/mongodb +0 -10
- data/lib/templates/database/mysql +0 -11
- data/lib/templates/database/postgresql +0 -11
- data/lib/templates/database/redis +0 -10
- data/lib/templates/encryptor/gpg +0 -9
- data/lib/templates/encryptor/openssl +0 -5
- data/lib/templates/notifier/mail +0 -14
- data/lib/templates/readme +0 -15
- data/lib/templates/storage/cloudfiles +0 -7
- data/lib/templates/storage/dropbox +0 -8
- data/lib/templates/storage/ftp +0 -8
- data/lib/templates/storage/rsync +0 -7
- data/lib/templates/storage/s3 +0 -8
- data/lib/templates/storage/scp +0 -8
- data/lib/templates/storage/sftp +0 -8
- data/spec/archive_spec.rb +0 -53
- data/spec/backup_spec.rb +0 -11
- data/spec/compressor/gzip_spec.rb +0 -59
- data/spec/configuration/base_spec.rb +0 -35
- data/spec/configuration/compressor/gzip_spec.rb +0 -28
- data/spec/configuration/database/base_spec.rb +0 -16
- data/spec/configuration/database/mongodb_spec.rb +0 -30
- data/spec/configuration/database/mysql_spec.rb +0 -32
- data/spec/configuration/database/postgresql_spec.rb +0 -32
- data/spec/configuration/database/redis_spec.rb +0 -30
- data/spec/configuration/encryptor/gpg_spec.rb +0 -25
- data/spec/configuration/encryptor/open_ssl_spec.rb +0 -31
- data/spec/configuration/notifier/mail_spec.rb +0 -32
- data/spec/configuration/storage/cloudfiles_spec.rb +0 -34
- data/spec/configuration/storage/dropbox_spec.rb +0 -40
- data/spec/configuration/storage/ftp_spec.rb +0 -40
- data/spec/configuration/storage/rsync_spec.rb +0 -37
- data/spec/configuration/storage/s3_spec.rb +0 -37
- data/spec/configuration/storage/scp_spec.rb +0 -40
- data/spec/configuration/storage/sftp_spec.rb +0 -40
- data/spec/database/base_spec.rb +0 -30
- data/spec/database/mongodb_spec.rb +0 -144
- data/spec/database/mysql_spec.rb +0 -150
- data/spec/database/postgresql_spec.rb +0 -164
- data/spec/database/redis_spec.rb +0 -122
- data/spec/encryptor/gpg_spec.rb +0 -57
- data/spec/encryptor/open_ssl_spec.rb +0 -102
- data/spec/logger_spec.rb +0 -37
- data/spec/model_spec.rb +0 -236
- data/spec/notifier/mail_spec.rb +0 -97
- data/spec/spec_helper.rb +0 -21
- data/spec/storage/base_spec.rb +0 -33
- data/spec/storage/cloudfiles_spec.rb +0 -102
- data/spec/storage/dropbox_spec.rb +0 -89
- data/spec/storage/ftp_spec.rb +0 -133
- data/spec/storage/object_spec.rb +0 -74
- data/spec/storage/rsync_spec.rb +0 -115
- data/spec/storage/s3_spec.rb +0 -110
- data/spec/storage/scp_spec.rb +0 -129
- data/spec/storage/sftp_spec.rb +0 -125
- data/spec/version_spec.rb +0 -32
data/lib/backup/storage/rsync.rb
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
# Only load the Net::SSH library when the Backup::Storage::RSync class is loaded
|
|
5
|
-
require 'net/ssh'
|
|
6
|
-
|
|
7
|
-
module Backup
|
|
8
|
-
module Storage
|
|
9
|
-
class RSync < Base
|
|
10
|
-
include Backup::CLI
|
|
11
|
-
|
|
12
|
-
##
|
|
13
|
-
# Server credentials
|
|
14
|
-
attr_accessor :username, :password
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
# Server IP Address and SSH port
|
|
18
|
-
attr_accessor :ip, :port
|
|
19
|
-
|
|
20
|
-
##
|
|
21
|
-
# Path to store backups to
|
|
22
|
-
attr_accessor :path
|
|
23
|
-
|
|
24
|
-
##
|
|
25
|
-
# Creates a new instance of the RSync storage object
|
|
26
|
-
# First it sets the defaults (if any exist) and then evaluates
|
|
27
|
-
# the configuration block which may overwrite these defaults
|
|
28
|
-
def initialize(&block)
|
|
29
|
-
load_defaults!
|
|
30
|
-
|
|
31
|
-
@port ||= 22
|
|
32
|
-
@path ||= 'backups'
|
|
33
|
-
|
|
34
|
-
instance_eval(&block) if block_given?
|
|
35
|
-
|
|
36
|
-
@time = TIME
|
|
37
|
-
@path = path.sub(/^\~\//, '')
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
##
|
|
41
|
-
# This is the remote path to where the backup files will be stored
|
|
42
|
-
def remote_path
|
|
43
|
-
File.join(path, TRIGGER)
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
##
|
|
47
|
-
# Performs the backup transfer
|
|
48
|
-
def perform!
|
|
49
|
-
transfer!
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
private
|
|
53
|
-
|
|
54
|
-
##
|
|
55
|
-
# Establishes a connection to the remote server and returns the Net::SSH object.
|
|
56
|
-
# Not doing any instance variable caching because this object gets persisted in YAML
|
|
57
|
-
# format to a file and will issues. This, however has no impact on performance since it only
|
|
58
|
-
# gets invoked once per object for a #transfer! and once for a remove! Backups run in the
|
|
59
|
-
# background anyway so even if it were a bit slower it shouldn't matter.
|
|
60
|
-
def connection
|
|
61
|
-
Net::SSH.start(ip, username, :password => password, :port => port)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
##
|
|
65
|
-
# Transfers the archived file to the specified remote server
|
|
66
|
-
def transfer!
|
|
67
|
-
Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
|
|
68
|
-
create_remote_directories!
|
|
69
|
-
run("#{ utility(:rsync) } #{ options } '#{ File.join(local_path, local_file) }' '#{ username }@#{ ip }:#{ File.join(remote_path, remote_file[20..-1]) }'")
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
##
|
|
73
|
-
# Removes the transferred archive file from the server
|
|
74
|
-
def remove!
|
|
75
|
-
response = connection.exec!("rm #{ File.join(remote_path, remote_file) }")
|
|
76
|
-
if response =~ /No such file or directory/
|
|
77
|
-
Logger.warn "Could not remove file \"#{ File.join(remote_path, remote_file) }\"."
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
##
|
|
82
|
-
# Creates (if they don't exist yet) all the directories on the remote
|
|
83
|
-
# server in order to upload the backup file.
|
|
84
|
-
def create_remote_directories!
|
|
85
|
-
connection.exec!("mkdir -p '#{ remote_path }'")
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
##
|
|
89
|
-
# RSync options
|
|
90
|
-
# -z = Compresses the bytes that will be transferred to reduce bandwidth usage
|
|
91
|
-
# -e = Allow the usage of SSH remote shell
|
|
92
|
-
# --port = the port to connect to through SSH
|
|
93
|
-
# -Phv = debug options
|
|
94
|
-
def options
|
|
95
|
-
"-z -e ssh --port='#{ port }'"
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
data/lib/backup/storage/s3.rb
DELETED
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
# Only load the Fog gem when the Backup::Storage::S3 class is loaded
|
|
5
|
-
require 'fog'
|
|
6
|
-
|
|
7
|
-
module Backup
|
|
8
|
-
module Storage
|
|
9
|
-
class S3 < Base
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
# Amazon Simple Storage Service (S3) Credentials
|
|
13
|
-
attr_accessor :access_key_id, :secret_access_key
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
# Amazon S3 bucket name and path
|
|
17
|
-
attr_accessor :bucket, :path
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
# Region of the specified S3 bucket
|
|
21
|
-
attr_accessor :region
|
|
22
|
-
|
|
23
|
-
##
|
|
24
|
-
# Creates a new instance of the Amazon S3 storage object
|
|
25
|
-
# First it sets the defaults (if any exist) and then evaluates
|
|
26
|
-
# the configuration block which may overwrite these defaults
|
|
27
|
-
#
|
|
28
|
-
# Currently available regions:
|
|
29
|
-
# eu-west-1, us-east-1, ap-southeast-1, us-west-1
|
|
30
|
-
def initialize(&block)
|
|
31
|
-
load_defaults!
|
|
32
|
-
|
|
33
|
-
@path ||= 'backups'
|
|
34
|
-
|
|
35
|
-
instance_eval(&block) if block_given?
|
|
36
|
-
|
|
37
|
-
@path = path.sub(/^\//, '')
|
|
38
|
-
@time = TIME
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
##
|
|
42
|
-
# This is the remote path to where the backup files will be stored
|
|
43
|
-
def remote_path
|
|
44
|
-
File.join(path, TRIGGER, '/')
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# This is the provider that Fog uses for the S3 Storage
|
|
49
|
-
def provider
|
|
50
|
-
'AWS'
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
##
|
|
54
|
-
# Performs the backup transfer
|
|
55
|
-
def perform!
|
|
56
|
-
transfer!
|
|
57
|
-
cycle!
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
private
|
|
61
|
-
|
|
62
|
-
##
|
|
63
|
-
# Establishes a connection to Amazon S3 and returns the Fog object.
|
|
64
|
-
# Not doing any instance variable caching because this object gets persisted in YAML
|
|
65
|
-
# format to a file and will issues. This, however has no impact on performance since it only
|
|
66
|
-
# gets invoked once per object for a #transfer! and once for a remove! Backups run in the
|
|
67
|
-
# background anyway so even if it were a bit slower it shouldn't matter.
|
|
68
|
-
def connection
|
|
69
|
-
Fog::Storage.new(
|
|
70
|
-
:provider => provider,
|
|
71
|
-
:aws_access_key_id => access_key_id,
|
|
72
|
-
:aws_secret_access_key => secret_access_key,
|
|
73
|
-
:region => region
|
|
74
|
-
)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
##
|
|
78
|
-
# Transfers the archived file to the specified Amazon S3 bucket
|
|
79
|
-
def transfer!
|
|
80
|
-
begin
|
|
81
|
-
Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
|
|
82
|
-
connection.sync_clock
|
|
83
|
-
connection.put_object(
|
|
84
|
-
bucket,
|
|
85
|
-
File.join(remote_path, remote_file),
|
|
86
|
-
File.open(File.join(local_path, local_file))
|
|
87
|
-
)
|
|
88
|
-
rescue Excon::Errors::SocketError
|
|
89
|
-
puts "\nAn error occurred while trying to transfer the backup."
|
|
90
|
-
puts "Make sure the bucket exists, and that you specified the correct bucket region.\n\n"
|
|
91
|
-
puts "The available regions are:\n\n"
|
|
92
|
-
puts %w[eu-west-1 us-east-1 ap-southeast-1 us-west-1].map{ |region| "\s\s* #{region}" }.join("\n")
|
|
93
|
-
exit
|
|
94
|
-
end
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
##
|
|
98
|
-
# Removes the transferred archive file from the Amazon S3 bucket
|
|
99
|
-
def remove!
|
|
100
|
-
begin
|
|
101
|
-
connection.sync_clock
|
|
102
|
-
connection.delete_object(bucket, File.join(remote_path, remote_file))
|
|
103
|
-
rescue Excon::Errors::SocketError; end
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
data/lib/backup/storage/scp.rb
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
# Only load the Net::SSH and Net::SCP library/gems
|
|
5
|
-
# when the Backup::Storage::SCP class is loaded
|
|
6
|
-
require 'net/ssh'
|
|
7
|
-
require 'net/scp'
|
|
8
|
-
|
|
9
|
-
module Backup
|
|
10
|
-
module Storage
|
|
11
|
-
class SCP < Base
|
|
12
|
-
|
|
13
|
-
##
|
|
14
|
-
# Server credentials
|
|
15
|
-
attr_accessor :username, :password
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
# Server IP Address and SCP port
|
|
19
|
-
attr_accessor :ip, :port
|
|
20
|
-
|
|
21
|
-
##
|
|
22
|
-
# Path to store backups to
|
|
23
|
-
attr_accessor :path
|
|
24
|
-
|
|
25
|
-
##
|
|
26
|
-
# Creates a new instance of the SCP storage object
|
|
27
|
-
# First it sets the defaults (if any exist) and then evaluates
|
|
28
|
-
# the configuration block which may overwrite these defaults
|
|
29
|
-
def initialize(&block)
|
|
30
|
-
load_defaults!
|
|
31
|
-
|
|
32
|
-
@port ||= 22
|
|
33
|
-
@path ||= 'backups'
|
|
34
|
-
|
|
35
|
-
instance_eval(&block) if block_given?
|
|
36
|
-
|
|
37
|
-
@time = TIME
|
|
38
|
-
@path = path.sub(/^\~\//, '')
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
##
|
|
42
|
-
# This is the remote path to where the backup files will be stored
|
|
43
|
-
def remote_path
|
|
44
|
-
File.join(path, TRIGGER)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
##
|
|
48
|
-
# Performs the backup transfer
|
|
49
|
-
def perform!
|
|
50
|
-
transfer!
|
|
51
|
-
cycle!
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
private
|
|
55
|
-
|
|
56
|
-
##
|
|
57
|
-
# Establishes a connection to the remote server and returns the Net::SCP object.
|
|
58
|
-
# Not doing any instance variable caching because this object gets persisted in YAML
|
|
59
|
-
# format to a file and will issues. This, however has no impact on performance since it only
|
|
60
|
-
# gets invoked once per object for a #transfer! and once for a remove! Backups run in the
|
|
61
|
-
# background anyway so even if it were a bit slower it shouldn't matter.
|
|
62
|
-
#
|
|
63
|
-
# We will be using Net::SSH, and use Net::SCP through Net::SSH to transfer backups
|
|
64
|
-
def connection
|
|
65
|
-
Net::SSH.start(ip, username, :password => password, :port => port)
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
##
|
|
69
|
-
# Transfers the archived file to the specified remote server
|
|
70
|
-
def transfer!
|
|
71
|
-
Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
|
|
72
|
-
create_remote_directories!
|
|
73
|
-
connection.scp.upload!(
|
|
74
|
-
File.join(local_path, local_file),
|
|
75
|
-
File.join(remote_path, remote_file)
|
|
76
|
-
)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
##
|
|
80
|
-
# Removes the transferred archive file from the server
|
|
81
|
-
def remove!
|
|
82
|
-
response = connection.exec!("rm #{ File.join(remote_path, remote_file) }")
|
|
83
|
-
if response =~ /No such file or directory/
|
|
84
|
-
Logger.warn "Could not remove file \"#{ File.join(remote_path, remote_file) }\"."
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
##
|
|
89
|
-
# Creates (if they don't exist yet) all the directories on the remote
|
|
90
|
-
# server in order to upload the backup file. Net::SCP does not support
|
|
91
|
-
# paths to directories that don't yet exist when creating new directories.
|
|
92
|
-
# Instead, we split the parts up in to an array (for each '/') and loop through
|
|
93
|
-
# that to create the directories one by one. Net::SCP raises an exception when
|
|
94
|
-
# the directory it's trying ot create already exists, so we have rescue it
|
|
95
|
-
def create_remote_directories!
|
|
96
|
-
path_parts = Array.new
|
|
97
|
-
remote_path.split('/').each do |path_part|
|
|
98
|
-
path_parts << path_part
|
|
99
|
-
connection.exec!("mkdir '#{ path_parts.join('/') }'")
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
end
|
|
104
|
-
end
|
|
105
|
-
end
|
data/lib/backup/storage/sftp.rb
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
# Only load the Net::SFTP library/gem when the Backup::Storage::SFTP class is loaded
|
|
5
|
-
require 'net/sftp'
|
|
6
|
-
|
|
7
|
-
module Backup
|
|
8
|
-
module Storage
|
|
9
|
-
class SFTP < Base
|
|
10
|
-
|
|
11
|
-
##
|
|
12
|
-
# Server credentials
|
|
13
|
-
attr_accessor :username, :password
|
|
14
|
-
|
|
15
|
-
##
|
|
16
|
-
# Server IP Address and SFTP port
|
|
17
|
-
attr_accessor :ip, :port
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
# Path to store backups to
|
|
21
|
-
attr_accessor :path
|
|
22
|
-
|
|
23
|
-
##
|
|
24
|
-
# Creates a new instance of the SFTP storage object
|
|
25
|
-
# First it sets the defaults (if any exist) and then evaluates
|
|
26
|
-
# the configuration block which may overwrite these defaults
|
|
27
|
-
def initialize(&block)
|
|
28
|
-
load_defaults!
|
|
29
|
-
|
|
30
|
-
@port ||= 22
|
|
31
|
-
@path ||= 'backups'
|
|
32
|
-
|
|
33
|
-
instance_eval(&block) if block_given?
|
|
34
|
-
|
|
35
|
-
@time = TIME
|
|
36
|
-
@path = path.sub(/^\~\//, '')
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
# This is the remote path to where the backup files will be stored
|
|
41
|
-
def remote_path
|
|
42
|
-
File.join(path, TRIGGER)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
##
|
|
46
|
-
# Performs the backup transfer
|
|
47
|
-
def perform!
|
|
48
|
-
transfer!
|
|
49
|
-
cycle!
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
private
|
|
53
|
-
|
|
54
|
-
##
|
|
55
|
-
# Establishes a connection to the remote server and returns the Net::SFTP object.
|
|
56
|
-
# Not doing any instance variable caching because this object gets persisted in YAML
|
|
57
|
-
# format to a file and will issues. This, however has no impact on performance since it only
|
|
58
|
-
# gets invoked once per object for a #transfer! and once for a remove! Backups run in the
|
|
59
|
-
# background anyway so even if it were a bit slower it shouldn't matter.
|
|
60
|
-
def connection
|
|
61
|
-
Net::SFTP.start(ip, username, :password => password, :port => port)
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
##
|
|
65
|
-
# Transfers the archived file to the specified remote server
|
|
66
|
-
def transfer!
|
|
67
|
-
Logger.message("#{ self.class } started transferring \"#{ remote_file }\".")
|
|
68
|
-
create_remote_directories!
|
|
69
|
-
connection.upload!(
|
|
70
|
-
File.join(local_path, local_file),
|
|
71
|
-
File.join(remote_path, remote_file)
|
|
72
|
-
)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
##
|
|
76
|
-
# Removes the transferred archive file from the server
|
|
77
|
-
def remove!
|
|
78
|
-
begin
|
|
79
|
-
connection.remove!(
|
|
80
|
-
File.join(remote_path, remote_file)
|
|
81
|
-
)
|
|
82
|
-
rescue Net::SFTP::StatusException
|
|
83
|
-
Logger.warn "Could not remove file \"#{ File.join(remote_path, remote_file) }\"."
|
|
84
|
-
end
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
##
|
|
88
|
-
# Creates (if they don't exist yet) all the directories on the remote
|
|
89
|
-
# server in order to upload the backup file. Net::SFTP does not support
|
|
90
|
-
# paths to directories that don't yet exist when creating new directories.
|
|
91
|
-
# Instead, we split the parts up in to an array (for each '/') and loop through
|
|
92
|
-
# that to create the directories one by one. Net::SFTP raises an exception when
|
|
93
|
-
# the directory it's trying ot create already exists, so we have rescue it
|
|
94
|
-
def create_remote_directories!
|
|
95
|
-
path_parts = Array.new
|
|
96
|
-
remote_path.split('/').each do |path_part|
|
|
97
|
-
path_parts << path_part
|
|
98
|
-
begin
|
|
99
|
-
connection.mkdir!(path_parts.join('/'))
|
|
100
|
-
rescue Net::SFTP::StatusException; end
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
end
|
|
105
|
-
end
|
|
106
|
-
end
|
data/lib/backup/version.rb
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
|
|
3
|
-
module Backup
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
# Usage:
|
|
7
|
-
#
|
|
8
|
-
# # Returns the current backup version based on the defined constants
|
|
9
|
-
# Backup::Version.current
|
|
10
|
-
#
|
|
11
|
-
# # Returns a gemspec compatible version number based on the defined constants
|
|
12
|
-
# Backup::Version.gemspec
|
|
13
|
-
#
|
|
14
|
-
class Version
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
# MAJOR:
|
|
18
|
-
# Defines the major version
|
|
19
|
-
# MINOR:
|
|
20
|
-
# Defines the minor version
|
|
21
|
-
# PATCH:
|
|
22
|
-
# Defines the patch version
|
|
23
|
-
# BUILD:
|
|
24
|
-
# Defines the build version ( use 'false' if no build )
|
|
25
|
-
MAJOR, MINOR, PATCH, BUILD = 3, 0, 2, false
|
|
26
|
-
|
|
27
|
-
# ========================================================= #
|
|
28
|
-
# ADJUST THE CONSTANTS ABOVE TO CHANGE THE BACKUP VERSION #
|
|
29
|
-
# ========================================================= #
|
|
30
|
-
|
|
31
|
-
##
|
|
32
|
-
# Returns the major version ( big release based off of multiple minor releases )
|
|
33
|
-
def self.major
|
|
34
|
-
MAJOR
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
##
|
|
38
|
-
# Returns the minor version ( small release based off of multiple patches )
|
|
39
|
-
def self.minor
|
|
40
|
-
MINOR
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
##
|
|
44
|
-
# Returns the patch version ( updates, features and (crucial) bug fixes based off of multiple builds )
|
|
45
|
-
def self.patch
|
|
46
|
-
PATCH
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
##
|
|
50
|
-
# Returns the build version ( improvements, small additions, frequent releases )
|
|
51
|
-
def self.build
|
|
52
|
-
BUILD
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
##
|
|
56
|
-
# Returns the current version ( not for gemspec / rubygems )
|
|
57
|
-
def self.current
|
|
58
|
-
"#{major}.#{minor}.#{patch} / build #{build or 0}"
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
##
|
|
62
|
-
# Returns the (gemspec qualified) current version
|
|
63
|
-
def self.gemspec
|
|
64
|
-
if build.eql?(false)
|
|
65
|
-
"#{major}.#{minor}.#{patch}"
|
|
66
|
-
else
|
|
67
|
-
"#{major}.#{minor}.#{patch}.build.#{build}"
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
end
|
|
72
|
-
end
|