backup 2.4.5.1 → 3.0.0.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.
Files changed (168) hide show
  1. data/.gitignore +2 -0
  2. data/.infinity_test +7 -0
  3. data/.rspec +3 -0
  4. data/Gemfile +17 -0
  5. data/Gemfile.lock +88 -0
  6. data/LICENSE.md +24 -0
  7. data/README.md +189 -75
  8. data/backup.gemspec +41 -0
  9. data/bin/backup +161 -90
  10. data/lib/backup.rb +133 -117
  11. data/lib/backup/archive.rb +54 -0
  12. data/lib/backup/cli.rb +50 -0
  13. data/lib/backup/compressor/base.rb +17 -0
  14. data/lib/backup/compressor/gzip.rb +61 -0
  15. data/lib/backup/configuration/base.rb +7 -67
  16. data/lib/backup/configuration/compressor/base.rb +10 -0
  17. data/lib/backup/configuration/compressor/gzip.rb +23 -0
  18. data/lib/backup/configuration/database/base.rb +18 -0
  19. data/lib/backup/configuration/database/mongodb.rb +37 -0
  20. data/lib/backup/configuration/database/mysql.rb +37 -0
  21. data/lib/backup/configuration/database/postgresql.rb +37 -0
  22. data/lib/backup/configuration/database/redis.rb +35 -0
  23. data/lib/backup/configuration/encryptor/base.rb +10 -0
  24. data/lib/backup/configuration/encryptor/gpg.rb +17 -0
  25. data/lib/backup/configuration/encryptor/open_ssl.rb +26 -0
  26. data/lib/backup/configuration/helpers.rb +47 -17
  27. data/lib/backup/configuration/notifier/base.rb +39 -0
  28. data/lib/backup/configuration/notifier/mail.rb +52 -0
  29. data/lib/backup/configuration/storage/base.rb +18 -0
  30. data/lib/backup/configuration/storage/cloudfiles.rb +21 -0
  31. data/lib/backup/configuration/storage/dropbox.rb +25 -0
  32. data/lib/backup/configuration/storage/ftp.rb +25 -0
  33. data/lib/backup/configuration/storage/rsync.rb +25 -0
  34. data/lib/backup/configuration/storage/s3.rb +25 -0
  35. data/lib/backup/configuration/storage/scp.rb +25 -0
  36. data/lib/backup/configuration/storage/sftp.rb +25 -0
  37. data/lib/backup/database/base.rb +33 -0
  38. data/lib/backup/database/mongodb.rb +137 -0
  39. data/lib/backup/database/mysql.rb +104 -0
  40. data/lib/backup/database/postgresql.rb +111 -0
  41. data/lib/backup/database/redis.rb +105 -0
  42. data/lib/backup/encryptor/base.rb +17 -0
  43. data/lib/backup/encryptor/gpg.rb +78 -0
  44. data/lib/backup/encryptor/open_ssl.rb +67 -0
  45. data/lib/backup/finder.rb +39 -0
  46. data/lib/backup/logger.rb +80 -0
  47. data/lib/backup/model.rb +249 -0
  48. data/lib/backup/notifier/base.rb +29 -0
  49. data/lib/backup/notifier/binder.rb +32 -0
  50. data/lib/backup/notifier/mail.rb +141 -0
  51. data/lib/backup/notifier/templates/notify_failure.erb +31 -0
  52. data/lib/backup/notifier/templates/notify_success.erb +16 -0
  53. data/lib/backup/storage/base.rb +60 -3
  54. data/lib/backup/storage/cloudfiles.rb +85 -6
  55. data/lib/backup/storage/dropbox.rb +74 -4
  56. data/lib/backup/storage/ftp.rb +103 -27
  57. data/lib/backup/storage/object.rb +45 -0
  58. data/lib/backup/storage/rsync.rb +100 -0
  59. data/lib/backup/storage/s3.rb +100 -7
  60. data/lib/backup/storage/scp.rb +94 -19
  61. data/lib/backup/storage/sftp.rb +94 -19
  62. data/lib/backup/version.rb +70 -1
  63. data/lib/templates/archive +4 -0
  64. data/lib/templates/compressor/gzip +4 -0
  65. data/lib/templates/database/mongodb +10 -0
  66. data/lib/templates/database/mysql +11 -0
  67. data/lib/templates/database/postgresql +11 -0
  68. data/lib/templates/database/redis +10 -0
  69. data/lib/templates/encryptor/gpg +9 -0
  70. data/lib/templates/encryptor/openssl +5 -0
  71. data/lib/templates/notifier/mail +14 -0
  72. data/lib/templates/readme +15 -0
  73. data/lib/templates/storage/cloudfiles +7 -0
  74. data/lib/templates/storage/dropbox +8 -0
  75. data/lib/templates/storage/ftp +8 -0
  76. data/lib/templates/storage/rsync +7 -0
  77. data/lib/templates/storage/s3 +8 -0
  78. data/lib/templates/storage/scp +8 -0
  79. data/lib/templates/storage/sftp +8 -0
  80. data/spec/archive_spec.rb +53 -0
  81. data/spec/backup_spec.rb +11 -0
  82. data/spec/compressor/gzip_spec.rb +59 -0
  83. data/spec/configuration/base_spec.rb +35 -0
  84. data/spec/configuration/compressor/gzip_spec.rb +28 -0
  85. data/spec/configuration/database/base_spec.rb +16 -0
  86. data/spec/configuration/database/mongodb_spec.rb +30 -0
  87. data/spec/configuration/database/mysql_spec.rb +32 -0
  88. data/spec/configuration/database/postgresql_spec.rb +32 -0
  89. data/spec/configuration/database/redis_spec.rb +30 -0
  90. data/spec/configuration/encryptor/gpg_spec.rb +25 -0
  91. data/spec/configuration/encryptor/open_ssl_spec.rb +31 -0
  92. data/spec/configuration/notifier/mail_spec.rb +32 -0
  93. data/spec/configuration/storage/cloudfiles_spec.rb +34 -0
  94. data/spec/configuration/storage/dropbox_spec.rb +40 -0
  95. data/spec/configuration/storage/ftp_spec.rb +40 -0
  96. data/spec/configuration/storage/rsync_spec.rb +37 -0
  97. data/spec/configuration/storage/s3_spec.rb +37 -0
  98. data/spec/configuration/storage/scp_spec.rb +40 -0
  99. data/spec/configuration/storage/sftp_spec.rb +40 -0
  100. data/spec/database/base_spec.rb +30 -0
  101. data/spec/database/mongodb_spec.rb +144 -0
  102. data/spec/database/mysql_spec.rb +150 -0
  103. data/spec/database/postgresql_spec.rb +164 -0
  104. data/spec/database/redis_spec.rb +122 -0
  105. data/spec/encryptor/gpg_spec.rb +57 -0
  106. data/spec/encryptor/open_ssl_spec.rb +102 -0
  107. data/spec/logger_spec.rb +37 -0
  108. data/spec/model_spec.rb +236 -0
  109. data/spec/notifier/mail_spec.rb +97 -0
  110. data/spec/spec_helper.rb +21 -0
  111. data/spec/storage/base_spec.rb +33 -0
  112. data/spec/storage/cloudfiles_spec.rb +102 -0
  113. data/spec/storage/dropbox_spec.rb +89 -0
  114. data/spec/storage/ftp_spec.rb +133 -0
  115. data/spec/storage/object_spec.rb +74 -0
  116. data/spec/storage/rsync_spec.rb +115 -0
  117. data/spec/storage/s3_spec.rb +110 -0
  118. data/spec/storage/scp_spec.rb +129 -0
  119. data/spec/storage/sftp_spec.rb +125 -0
  120. data/spec/version_spec.rb +32 -0
  121. metadata +139 -123
  122. data/CHANGELOG +0 -131
  123. data/LICENSE +0 -20
  124. data/generators/backup/backup_generator.rb +0 -69
  125. data/generators/backup/templates/backup.rake +0 -56
  126. data/generators/backup/templates/backup.rb +0 -253
  127. data/generators/backup/templates/create_backup_tables.rb +0 -18
  128. data/generators/backup_update/backup_update_generator.rb +0 -50
  129. data/generators/backup_update/templates/migrations/update_backup_tables.rb +0 -27
  130. data/lib/backup/adapters/archive.rb +0 -34
  131. data/lib/backup/adapters/base.rb +0 -167
  132. data/lib/backup/adapters/custom.rb +0 -41
  133. data/lib/backup/adapters/mongo_db.rb +0 -139
  134. data/lib/backup/adapters/mysql.rb +0 -60
  135. data/lib/backup/adapters/postgresql.rb +0 -60
  136. data/lib/backup/adapters/sqlite.rb +0 -25
  137. data/lib/backup/command_helper.rb +0 -14
  138. data/lib/backup/configuration/adapter.rb +0 -21
  139. data/lib/backup/configuration/adapter_options.rb +0 -8
  140. data/lib/backup/configuration/attributes.rb +0 -19
  141. data/lib/backup/configuration/mail.rb +0 -20
  142. data/lib/backup/configuration/smtp.rb +0 -8
  143. data/lib/backup/configuration/storage.rb +0 -8
  144. data/lib/backup/connection/cloudfiles.rb +0 -75
  145. data/lib/backup/connection/dropbox.rb +0 -63
  146. data/lib/backup/connection/s3.rb +0 -88
  147. data/lib/backup/core_ext/object.rb +0 -5
  148. data/lib/backup/environment/base.rb +0 -12
  149. data/lib/backup/environment/rails_configuration.rb +0 -15
  150. data/lib/backup/environment/unix_configuration.rb +0 -109
  151. data/lib/backup/mail/base.rb +0 -97
  152. data/lib/backup/mail/mail.txt +0 -7
  153. data/lib/backup/record/base.rb +0 -65
  154. data/lib/backup/record/cloudfiles.rb +0 -28
  155. data/lib/backup/record/dropbox.rb +0 -27
  156. data/lib/backup/record/ftp.rb +0 -39
  157. data/lib/backup/record/local.rb +0 -26
  158. data/lib/backup/record/s3.rb +0 -25
  159. data/lib/backup/record/scp.rb +0 -33
  160. data/lib/backup/record/sftp.rb +0 -38
  161. data/lib/backup/storage/local.rb +0 -22
  162. data/lib/generators/backup/USAGE +0 -10
  163. data/lib/generators/backup/backup_generator.rb +0 -47
  164. data/lib/generators/backup/templates/backup.rake +0 -56
  165. data/lib/generators/backup/templates/backup.rb +0 -236
  166. data/lib/generators/backup/templates/create_backup_tables.rb +0 -18
  167. data/setup/backup.rb +0 -257
  168. data/setup/backup.sqlite3 +0 -0
@@ -0,0 +1,137 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ module Database
5
+ class MongoDB < Base
6
+
7
+ ##
8
+ # Name of the database that needs to get dumped
9
+ attr_accessor :name
10
+
11
+ ##
12
+ # Credentials for the specified database
13
+ attr_accessor :username, :password
14
+
15
+ ##
16
+ # Connectivity options
17
+ attr_accessor :host, :port
18
+
19
+ ##
20
+ # IPv6 support (disabled by default)
21
+ attr_accessor :ipv6
22
+
23
+ ##
24
+ # Collections to dump, collections that aren't specified won't get dumped
25
+ attr_accessor :only_collections
26
+
27
+ ##
28
+ # Additional "mongodump" options
29
+ attr_accessor :additional_options
30
+
31
+ ##
32
+ # Creates a new instance of the MongoDB database object
33
+ def initialize(&block)
34
+ load_defaults!
35
+
36
+ @only_collections ||= Array.new
37
+ @additional_options ||= Array.new
38
+ @ipv6 ||= false
39
+
40
+ instance_eval(&block)
41
+ prepare!
42
+ end
43
+
44
+ ##
45
+ # Builds the MongoDB credentials syntax to authenticate the user
46
+ # to perform the database dumping process
47
+ def credential_options
48
+ %w[username password].map do |option|
49
+ next if send(option).nil? or send(option).empty?
50
+ "--#{option}='#{send(option)}'"
51
+ end.compact.join("\s")
52
+ end
53
+
54
+ ##
55
+ # Builds the MongoDB connectivity options syntax to connect the user
56
+ # to perform the database dumping process
57
+ def connectivity_options
58
+ %w[host port].map do |option|
59
+ next if send(option).nil? or (send(option).respond_to?(:empty?) and send(option).empty?)
60
+ "--#{option}='#{send(option)}'"
61
+ end.compact.join("\s")
62
+ end
63
+
64
+ ##
65
+ # Builds a MongoDB compatible string for the
66
+ # additional options specified by the user
67
+ def additional_options
68
+ @additional_options.join("\s")
69
+ end
70
+
71
+ ##
72
+ # Returns an array of collections to dump
73
+ def collections_to_dump
74
+ @only_collections
75
+ end
76
+
77
+ ##
78
+ # Returns the MongoDB database selector syntax
79
+ def database
80
+ "--db='#{ name }'"
81
+ end
82
+
83
+ ##
84
+ # Returns the mongodump syntax for enabling ipv6
85
+ def ipv6
86
+ @ipv6.eql?(true) ? '--ipv6' : ''
87
+ end
88
+
89
+ ##
90
+ # Returns the MongoDB syntax for determining where to output all the database dumps,
91
+ # e.g. ~/Backup/.tmp/MongoDB/<databases here>/<database collections>
92
+ def dump_directory
93
+ "--out='#{ dump_path }'"
94
+ end
95
+
96
+ ##
97
+ # Builds the full mongodump string based on all attributes
98
+ def mongodump
99
+ "#{ utility(:mongodump) } #{ database } #{ credential_options } " +
100
+ "#{ connectivity_options } #{ ipv6 } #{ additional_options } #{ dump_directory }"
101
+ end
102
+
103
+ ##
104
+ # Performs the mongodump command and outputs the data to the
105
+ # specified path based on the 'trigger'. If the user hasn't specified any
106
+ # specific collections to dump, it'll dump everything. If the user has specified
107
+ # collections to dump, it'll loop through the array of collections and invoke the
108
+ # 'mongodump' command once per collection
109
+ def perform!
110
+ log!
111
+
112
+ if collections_to_dump.is_a?(Array) and not collections_to_dump.empty?
113
+ specific_collection_dump!
114
+ else
115
+ dump!
116
+ end
117
+ end
118
+
119
+ ##
120
+ # Builds and runs the mongodump command
121
+ def dump!
122
+ run(mongodump)
123
+ end
124
+
125
+ ##
126
+ # For each collection in the @only_collections array, it'll
127
+ # build the whole 'mongodump' command, append the '--collection' option,
128
+ # and run the command built command
129
+ def specific_collection_dump!
130
+ collections_to_dump.each do |collection|
131
+ run("#{mongodump} --collection='#{collection}'")
132
+ end
133
+ end
134
+
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,104 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ module Database
5
+ class MySQL < Base
6
+
7
+ ##
8
+ # Name of the database that needs to get dumped
9
+ attr_accessor :name
10
+
11
+ ##
12
+ # Credentials for the specified database
13
+ attr_accessor :username, :password
14
+
15
+ ##
16
+ # Connectivity options
17
+ attr_accessor :host, :port, :socket
18
+
19
+ ##
20
+ # Tables to skip while dumping the database
21
+ attr_accessor :skip_tables
22
+
23
+ ##
24
+ # Tables to dump, tables that aren't specified won't get dumped
25
+ attr_accessor :only_tables
26
+
27
+ ##
28
+ # Additional "mysqldump" options
29
+ attr_accessor :additional_options
30
+
31
+ ##
32
+ # Creates a new instance of the MySQL adapter object
33
+ def initialize(&block)
34
+ load_defaults!
35
+
36
+ @skip_tables ||= Array.new
37
+ @only_tables ||= Array.new
38
+ @additional_options ||= Array.new
39
+
40
+ instance_eval(&block)
41
+ prepare!
42
+ end
43
+
44
+ ##
45
+ # Builds the MySQL syntax for specifying which tables to skip
46
+ # during the dumping of the database
47
+ def tables_to_skip
48
+ skip_tables.map do |table|
49
+ "--ignore-table='#{name}.#{table}'"
50
+ end.join("\s")
51
+ end
52
+
53
+ ##
54
+ # Builds the MySQL syntax for specifying which tables to dump
55
+ # during the dumping of the database
56
+ def tables_to_dump
57
+ only_tables.join("\s")
58
+ end
59
+
60
+ ##
61
+ # Builds the credentials MySQL syntax to authenticate the user
62
+ # to perform the database dumping process
63
+ def credential_options
64
+ %w[username password].map do |option|
65
+ next if send(option).nil? or send(option).empty?
66
+ "--#{option}='#{send(option)}'".gsub('--username', '--user')
67
+ end.compact.join("\s")
68
+ end
69
+
70
+ ##
71
+ # Builds the MySQL connectivity options syntax to connect the user
72
+ # to perform the database dumping process
73
+ def connectivity_options
74
+ %w[host port socket].map do |option|
75
+ next if send(option).nil? or (send(option).respond_to?(:empty?) and send(option).empty?)
76
+ "--#{option}='#{send(option)}'"
77
+ end.compact.join("\s")
78
+ end
79
+
80
+ ##
81
+ # Builds a MySQL compatible string for the additional options
82
+ # specified by the user
83
+ def options
84
+ additional_options.join("\s")
85
+ end
86
+
87
+ ##
88
+ # Builds the full mysqldump string based on all attributes
89
+ def mysqldump
90
+ "#{ utility(:mysqldump) } #{ credential_options } #{ connectivity_options } " +
91
+ "#{ options } #{ name } #{ tables_to_dump } #{ tables_to_skip }"
92
+ end
93
+
94
+ ##
95
+ # Performs the mysqldump command and outputs the
96
+ # data to the specified path based on the 'trigger'
97
+ def perform!
98
+ log!
99
+ run("#{mysqldump} > '#{File.join(dump_path, name)}.sql'")
100
+ end
101
+
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,111 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ module Database
5
+ class PostgreSQL < Base
6
+
7
+ ##
8
+ # Name of the database that needs to get dumped
9
+ attr_accessor :name
10
+
11
+ ##
12
+ # Credentials for the specified database
13
+ attr_accessor :username, :password
14
+
15
+ ##
16
+ # Connectivity options
17
+ attr_accessor :host, :port, :socket
18
+
19
+ ##
20
+ # Tables to skip while dumping the database
21
+ attr_accessor :skip_tables
22
+
23
+ ##
24
+ # Tables to dump, tables that aren't specified won't get dumped
25
+ attr_accessor :only_tables
26
+
27
+ ##
28
+ # Additional "pg_dump" options
29
+ attr_accessor :additional_options
30
+
31
+ ##
32
+ # Creates a new instance of the PostgreSQL adapter object
33
+ # Sets the PGPASSWORD environment variable to the password
34
+ # so it doesn't prompt and hang in the process
35
+ def initialize(&block)
36
+ load_defaults!
37
+
38
+ @skip_tables ||= Array.new
39
+ @only_tables ||= Array.new
40
+ @additional_options ||= Array.new
41
+
42
+ instance_eval(&block)
43
+ prepare!
44
+ ENV['PGPASSWORD'] = password
45
+ end
46
+
47
+ ##
48
+ # Builds the PostgreSQL syntax for specifying which tables to skip
49
+ # during the dumping of the database
50
+ def tables_to_skip
51
+ skip_tables.map do |table|
52
+ "--exclude-table='#{table}'"
53
+ end.join("\s")
54
+ end
55
+
56
+ ##
57
+ # Builds the PostgreSQL syntax for specifying which tables to dump
58
+ # during the dumping of the database
59
+ def tables_to_dump
60
+ only_tables.map do |table|
61
+ "--table='#{table}'"
62
+ end.join("\s")
63
+ end
64
+
65
+ ##
66
+ # Builds the credentials PostgreSQL syntax to authenticate the user
67
+ # to perform the database dumping process
68
+ def credential_options
69
+ return '' unless username.is_a?(String) and not username.empty?
70
+ "--username='#{username}'"
71
+ end
72
+
73
+ ##
74
+ # Builds the PostgreSQL connectivity options syntax to connect the user
75
+ # to perform the database dumping process, socket gets gsub'd to host since
76
+ # that's the option PostgreSQL takes for socket connections as well. In case
77
+ # both the host and the socket are specified, the socket will take priority over the host
78
+ def connectivity_options
79
+ %w[host port socket].map do |option|
80
+ next if send(option).nil? or (send(option).respond_to?(:empty?) and send(option).empty?)
81
+ "--#{option}='#{send(option)}'".gsub('--socket=', '--host=')
82
+ end.compact.join("\s")
83
+ end
84
+
85
+ ##
86
+ # Builds a PostgreSQL compatible string for the additional options
87
+ # specified by the user
88
+ def options
89
+ additional_options.join("\s")
90
+ end
91
+
92
+ ##
93
+ # Builds the full pgdump string based on all attributes
94
+ def pgdump
95
+ "#{ utility(:pg_dump) } #{ credential_options } #{ connectivity_options } " +
96
+ "#{ options } #{ tables_to_dump } #{ tables_to_skip } #{ name }"
97
+ end
98
+
99
+ ##
100
+ # Performs the pgdump command and outputs the
101
+ # data to the specified path based on the 'trigger'
102
+ # and resets the 'PGPASSWORD' environment variable to nil
103
+ def perform!
104
+ log!
105
+ run("#{pgdump} > '#{File.join(dump_path, name)}.sql'")
106
+ ENV['PGPASSWORD'] = nil
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,105 @@
1
+ # encoding: utf-8
2
+
3
+ module Backup
4
+ module Database
5
+ class Redis < Base
6
+
7
+ ##
8
+ # Name of and path to the database that needs to get dumped
9
+ attr_accessor :name, :path
10
+
11
+ ##
12
+ # Credentials for the specified database
13
+ attr_accessor :password
14
+
15
+ ##
16
+ # Determines whether Backup should invoke the SAVE command through
17
+ # the 'redis-cli' utility to persist the most recent data before
18
+ # copying over the dump file
19
+ attr_accessor :invoke_save
20
+
21
+ ##
22
+ # Connectivity options
23
+ attr_accessor :host, :port, :socket
24
+
25
+ ##
26
+ # Additional "redis-cli" options
27
+ attr_accessor :additional_options
28
+
29
+ ##
30
+ # Creates a new instance of the Redis database object
31
+ def initialize(&block)
32
+ load_defaults!
33
+
34
+ @additional_options ||= Array.new
35
+
36
+ instance_eval(&block)
37
+ prepare!
38
+ end
39
+
40
+ ##
41
+ # Builds the Redis credentials syntax to authenticate the user
42
+ # to perform the database dumping process
43
+ def credential_options
44
+ return "-a '#{password}'" if password; String.new
45
+ end
46
+
47
+ ##
48
+ # Builds the Redis connectivity options syntax to connect the user
49
+ # to perform the database dumping process
50
+ def connectivity_options
51
+ %w[host port socket].map do |option|
52
+ next if send(option).nil?; "-#{option[0,1]} '#{send(option)}'"
53
+ end.compact.join("\s")
54
+ end
55
+
56
+ ##
57
+ # Builds a Redis compatible string for the
58
+ # additional options specified by the user
59
+ def additional_options
60
+ @additional_options.join("\s")
61
+ end
62
+
63
+ ##
64
+ # Returns the Redis database file name
65
+ def database
66
+ "#{ name }.rdb"
67
+ end
68
+
69
+ ##
70
+ # Performs the Redis backup by using the 'cp' unix utility
71
+ # to copy the persisted Redis dump file to the Backup archive.
72
+ # Additionally, when 'invoke_save' is set to true, it'll tell
73
+ # the Redis server to persist the current state to the dump file
74
+ # before copying the dump to get the most recent updates in to the backup
75
+ def perform!
76
+ log!
77
+
78
+ invoke_save! if invoke_save
79
+ copy!
80
+ end
81
+
82
+ ##
83
+ # Tells Redis to persist the current state of the
84
+ # in-memory database to the persisted dump file
85
+ def invoke_save!
86
+ response = run("#{ utility('redis-cli') } #{ credential_options } #{ connectivity_options } #{ additional_options } SAVE")
87
+ unless response =~ /OK/
88
+ Logger.error "Could not invoke the Redis SAVE command. The #{ database } file might not be contain the most recent data."
89
+ Logger.error "Please check if the server is running, the credentials (if any) are correct, and the host/port/socket are correct."
90
+ end
91
+ end
92
+
93
+ ##
94
+ # Performs the copy command to copy over the Redis dump file to the Backup archive
95
+ def copy!
96
+ unless File.exist?(File.join(path, database))
97
+ Logger.error "Redis database dump not found in '#{ File.join(path, database) }'"
98
+ exit
99
+ end
100
+
101
+ run("#{ utility(:cp) } '#{ File.join(path, database) }' '#{ File.join(dump_path, database) }'")
102
+ end
103
+ end
104
+ end
105
+ end