capistrano-ops 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 48c373221e575d786df6abaf731ae417311c95584c1ae9db507b2f509b83a9f4
4
- data.tar.gz: 5aa7c63a62cc0d3f9dd8ac8af6f0eab4b16b8d0ac43f121961b5a1510757ddc5
3
+ metadata.gz: 6897d38c35cb8b0dfb713d16d0eb0c390c431636ea5c6565e1dc457b96a29c6b
4
+ data.tar.gz: 9789f0e37f0767403324c1ca68c97759a8ebdbdb5a3e4ac6d362b76dfc5064ad
5
5
  SHA512:
6
- metadata.gz: 11e060e8ed7888ffb2459a16b0482bae06d9ac7818d965a976345da0e06ab608948a5c46ba31e39c3989e240f02b5fd03ee305ef7e1c2ffc0ab4c15c0d453ca4
7
- data.tar.gz: afc62c529fe831ef17d8f32bb0f89a20687c031472e49b433baf1be7a9a993ce6bbac468a9ec5b0b37e982ee266709faac3d74e5d61985d3ef33e43ebc003b7f
6
+ metadata.gz: 4607175b27284ed6d19ca2fe3032dccde17f54cb62dfbfc43c614af031abf9990b873b89b1d905c74d2acb48dc4e94a3eec6b50bbff18dee0079b2a5264d04dd
7
+ data.tar.gz: 1ce1060464559ce566320e9ef7a1700d5d94ee688e6f8aea85f7dbd2548e78bfc5e6cb1f5e751b38e9b566e7411e89587d4207eb6c0349592d0cacab854e6ffc
data/.rubocop.yml ADDED
@@ -0,0 +1,21 @@
1
+ AllCops:
2
+ NewCops: disable
3
+ TargetRubyVersion: 2.7
4
+ Layout/LineLength:
5
+ Max: 160
6
+ Metrics/MethodLength:
7
+ Max: 50
8
+ Metrics/ClassLength:
9
+ Max: 750
10
+ Metrics/BlockLength:
11
+ Max: 50
12
+ Metrics/ParameterLists:
13
+ Max: 6
14
+ Metrics/AbcSize:
15
+ Max: 60
16
+ Metrics/CyclomaticComplexity:
17
+ Max: 25
18
+ Metrics/PerceivedComplexity:
19
+ Max: 25
20
+ Style/Documentation:
21
+ Enabled: false
data/README.md CHANGED
@@ -46,8 +46,12 @@ require 'capistrano/ops'
46
46
 
47
47
  | Script | Description |
48
48
  | ------------------------------------------------ | ----------------------------------------------------------------- |
49
- | `cap <environment> backup:create` | creates backup of postgres database on the server |
50
- | `cap <environment> backup:pull` | download latest postgres backup from server |
49
+ | `cap <environment> backup:create` | creates backup of postgres database on the server (deprecated) |
50
+ | `cap <environment> backup:pull` | download latest postgres backup from server (deprecated) |
51
+ | `cap <environment> backup:database:create` | creates backup of postgres database on the server |
52
+ | `cap <environment> backup:database:pull` | download latest postgres backup from server |
53
+ | `cap <environment> backup:storage:create` | creates backup of storage on the server |
54
+ | `cap <environment> backup:storage:pull` | download latest storage backup from server |
51
55
  | `cap <environment> figaro_yml:compare` | compare local application.yml with server application.yml |
52
56
  | `cap <environment> figaro_yml:get` | shows env vars from server application.yml configured thru figaro |
53
57
  | `cap <environment> logs:rails` | display server log live |
@@ -55,6 +59,8 @@ require 'capistrano/ops'
55
59
  | `cap <environment> invoke:rake TASK=<your:task>` | invoke rake task on server |
56
60
  | `rake pg:dump` | creates postgres database backup |
57
61
  | `rake pg:remove_old_dumps` | remove old postgres backups |
62
+ | `rake storage:backup` | creates backup of storage |
63
+ | `rake storage:remove_old_backups` | remove old storage backups |
58
64
 
59
65
  ## Usage
60
66
 
@@ -72,23 +78,26 @@ production:
72
78
 
73
79
  ### Optional Settings for backup task
74
80
 
75
- | env | description | type/options |
76
- | ------------------ | ------------------------------------------------------------------------- | :----------------------------------------------------------------: |
77
- | NUMBER_OF_BACKUPS | number of backups to keep (default: 1) | `number` |
78
- | BACKUPS_ENABLED | enable/disable backup task (default: Rails.env == 'production') | `boolean` |
79
- | DEFAULT_URL | notification message title (default: "#{database} Backup") | `string` |
80
- | NOTIFICATION_TYPE | for notification (default: nil) | `string` (`webhook`/`slack`) |
81
- | NOTIFICATION_LEVEL | for notification (default: nil) | `string` (`info`/`error`) |
82
- | SLACK_SECRET | for slack integration | `string` (e.g. `xoxb-1234567890-1234567890-1234567890-1234567890`) |
83
- | SLACK_CHANNEL | for slack integration | `string` (e.g. `C234567890`) |
84
- | WEBHOOK_URL | Webhook server to send message | e.g `http://example.com` |
85
- | WEBHOOK_SECRET | Secret to send with uses md5-hmac hexdigest in header`x-hub-signature` | --- |
86
- | BACKUP_PROVIDER | Backup provider (default: nil) | `string` (`s3`) |
87
- | S3_BACKUP_BUCKET | S3 bucket name for backups | `string` |
88
- | S3_BACKUP_REGION | S3 region for backups | `string` |
89
- | S3_BACKUP_KEY | S3 access key for backups | `string` |
90
- | S3_BACKUP_SECRET | S3 secret key for backups | `string` |
91
- | S3_BACKUP_ENDPOINT | S3 endpoint for backups (optional, used for other S3 compatible services) | `string` |
81
+ | env | description | type/options |
82
+ | -------------------------- | --------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------: |
83
+ | NUMBER_OF_BACKUPS | number of backups to keep (default: 7) | `number` |
84
+ | NUMBER_OF_LOCAL_BACKUPS | number of backups to keep locally (default: nil) | `number` |
85
+ | NUMBER_OF_EXTERNAL_BACKUPS | number of backups to keep externally (default: nil) | `number` |
86
+ | BACKUPS_ENABLED | enable/disable backup task (default: Rails.env == 'production') | `boolean` |
87
+ | EXTERNAL_BACKUP_ENABLED | enable/disable external backup (default: false) (only if 'BACKUPS_ENABLED', needs additional setup) | `boolean` |
88
+ | DEFAULT_URL | notification message title (default: "#{database} Backup") | `string` |
89
+ | NOTIFICATION_TYPE | for notification (default: nil) | `string` (`webhook`/`slack`) |
90
+ | NOTIFICATION_LEVEL | for notification (default: nil) | `string` (`info`/`error`) |
91
+ | SLACK_SECRET | for slack integration | `string` (e.g. `xoxb-1234567890-1234567890-1234567890-1234567890`) |
92
+ | SLACK_CHANNEL | for slack integration | `string` (e.g. `C234567890`) |
93
+ | WEBHOOK_URL | Webhook server to send message | e.g `http://example.com` |
94
+ | WEBHOOK_SECRET | Secret to send with uses md5-hmac hexdigest in header`x-hub-signature` | --- |
95
+ | BACKUP_PROVIDER | Backup provider (default: nil) | `string` (`s3`) |
96
+ | S3_BACKUP_BUCKET | S3 bucket name for backups | `string` |
97
+ | S3_BACKUP_REGION | S3 region for backups | `string` |
98
+ | S3_BACKUP_KEY | S3 access key for backups | `string` |
99
+ | S3_BACKUP_SECRET | S3 secret key for backups | `string` |
100
+ | S3_BACKUP_ENDPOINT | S3 endpoint for backups (optional, used for other S3 compatible services) | `string` |
92
101
 
93
102
  ### use with whenever/capistrano
94
103
 
@@ -102,10 +111,12 @@ set :output, -> { '2>&1 | logger -t whenever_cron' }
102
111
 
103
112
  every :day, at: '2:00 am' do
104
113
  rake 'pg:dump'
114
+ rake 'storage:backup'
105
115
  end
106
116
 
107
117
  every :day, at: '3:00 am' do
108
118
  rake 'pg:remove_old_dumps'
119
+ rake 'storage:remove_old_backups'
109
120
  end
110
121
  ```
111
122
 
@@ -153,6 +164,34 @@ if you want to use notification level you have to add this to your `application.
153
164
  NOTIFICATION_LEVEL: 'info' # default is 'error'
154
165
  ```
155
166
 
167
+ ## Backups
168
+
169
+ if you want to configure the number of backups you have to add this to your `application.yml`
170
+
171
+ ```ruby
172
+ NUMBER_OF_BACKUPS: 7 # default is 7 (local + external)
173
+ ```
174
+
175
+ to fine tune the number of local and external backups you can use this:
176
+
177
+ ```ruby
178
+ NUMBER_OF_LOCAL_BACKUPS: 7 # default is nil (local)
179
+ NUMBER_OF_EXTERNAL_BACKUPS: 7 # default is nil (local)
180
+ ```
181
+
182
+ ### Backup provider
183
+
184
+ if you want to use an external backup provider you have to add this to your `application.yml`
185
+
186
+ ```ruby
187
+ BACKUP_PROVIDER: 's3'
188
+ S3_BACKUP_BUCKET: '<your-s3-bucket>'
189
+ S3_BACKUP_REGION: '<your-s3-region>'
190
+ S3_BACKUP_KEY: '<your-s3-key>'
191
+ S3_BACKUP_SECRET: '<your-s3-secret>'
192
+ S3_BACKUP_ENDPOINT: '<your-s3-endpoint>' # optional, used for other S3 compatible services
193
+ ```
194
+
156
195
  ## Contributing
157
196
 
158
197
  1. Fork it ( https://github.com/zauberware/capistrano-ops/fork )
@@ -18,12 +18,12 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- test/{functional,unit}/*`.split("\n")
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
20
20
  s.require_paths = ['lib']
21
-
22
- s.required_ruby_version = '>= 2.5.0', '< 3.0.0'
23
-
24
- s.add_dependency 'rails'
25
- s.add_dependency 'nokogiri'
21
+
22
+ s.required_ruby_version = '~> 2.7.0'
26
23
  s.add_dependency 'aws-sdk-s3', '~> 1.128'
24
+ s.add_dependency 'faraday'
25
+ s.add_dependency 'nokogiri'
26
+ s.add_dependency 'rails'
27
27
  s.add_development_dependency 'bundler', '~> 2.4.12'
28
28
  s.add_development_dependency 'rake', '~> 10.0'
29
29
  end
@@ -1,38 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Backup
2
- class Api
3
- attr_accessor :backup_provider, :provider_config
4
+ class Api
5
+ attr_accessor :backup_provider, :provider_config
4
6
 
5
- def initialize(provider: ENV['BACKUP_PROVIDER'], provider_config: {})
6
- self.backup_provider = provider
7
- self.provider_config = provider_config
8
- end
7
+ def initialize(provider: ENV['BACKUP_PROVIDER'], provider_config: {})
8
+ self.backup_provider = provider
9
+ self.provider_config = provider_config
10
+ end
9
11
 
10
- def upload(backup_file, filename)
11
- case backup_provider
12
- when 's3'
13
- s3 = Backup::S3.new(**provider_config)
14
- s3.upload(backup_file, filename)
15
- when 'scp'
16
- p "SCP backup not implemented yet"
17
- when 'rsync'
18
- p "Rsync backup not implemented yet"
19
- else
20
- raise Backup::Error, "Backup provider not configured"
21
- end
22
- end
12
+ def upload(backup_file, filename)
13
+ case backup_provider
14
+ when 's3'
15
+ s3 = Backup::S3.new(**provider_config)
16
+ s3.upload(backup_file, filename)
17
+ when 'scp'
18
+ p 'SCP backup not implemented yet'
19
+ when 'rsync'
20
+ p 'Rsync backup not implemented yet'
21
+ else
22
+ raise Backup::Error, 'Backup provider not configured'
23
+ end
24
+ end
23
25
 
24
- def remove_old_backups(basename,keep)
25
- case backup_provider
26
- when 's3'
27
- s3 = Backup::S3.new(**provider_config)
28
- s3.remove_old_backups(basename,keep: keep)
29
- when 'scp'
30
- p "SCP backup not implemented yet"
31
- when 'rsync'
32
- p "Rsync backup not implemented yet"
33
- else
34
- raise Backup::Error, "Backup provider not configured"
35
- end
36
- end
26
+ def remove_old_backups(basename, keep)
27
+ case backup_provider
28
+ when 's3'
29
+ s3 = Backup::S3.new(**provider_config)
30
+ s3.remove_old_backups(basename, keep: keep)
31
+ when 'scp'
32
+ p 'SCP backup not implemented yet'
33
+ when 'rsync'
34
+ p 'Rsync backup not implemented yet'
35
+ else
36
+ raise Backup::Error, 'Backup provider not configured'
37
+ end
37
38
  end
38
- end
39
+ end
40
+ end
@@ -1,49 +1,52 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Backup
2
- require 'aws-sdk-s3'
3
- class S3
4
- attr_accessor :endpoint, :region, :access_key_id, :secret_access_key, :s3_client
4
+ require 'aws-sdk-s3'
5
+ class S3
6
+ attr_accessor :endpoint, :region, :access_key_id, :secret_access_key, :s3_client
5
7
 
6
- def initialize( endpoint: ENV['S3_BACKUP_ENDPOINT'], region: ENV['S3_BACKUP_REGION'], access_key_id: ENV['S3_BACKUP_KEY'], secret_access_key: ENV['S3_BACKUP_SECRET'])
7
- self.endpoint = endpoint
8
- self.region = region
9
- self.access_key_id = access_key_id
10
- self.secret_access_key = secret_access_key
11
- config = {
12
- region: region,
13
- access_key_id: access_key_id,
14
- secret_access_key: secret_access_key
15
- }
16
- config[:endpoint] = endpoint unless endpoint.nil?
17
- self.s3_client = Aws::S3::Client.new(config)
18
- end
8
+ def initialize(endpoint: ENV['S3_BACKUP_ENDPOINT'], region: ENV['S3_BACKUP_REGION'], access_key_id: ENV['S3_BACKUP_KEY'],
9
+ secret_access_key: ENV['S3_BACKUP_SECRET'])
10
+ self.endpoint = endpoint
11
+ self.region = region
12
+ self.access_key_id = access_key_id
13
+ self.secret_access_key = secret_access_key
14
+ config = {
15
+ region: region,
16
+ access_key_id: access_key_id,
17
+ secret_access_key: secret_access_key
18
+ }
19
+ config[:endpoint] = endpoint unless endpoint.nil?
20
+ self.s3_client = Aws::S3::Client.new(config)
21
+ end
19
22
 
20
- def upload(backup_file, key)
21
- begin
22
- s3_client.put_object(
23
- bucket: ENV['S3_BACKUP_BUCKET'],
24
- key: key,
25
- body: File.open(backup_file)
26
- )
27
- rescue => e
28
- puts "Error uploading backup to S3: #{e.message}"
29
- raise e
30
- end
31
- "File uploaded to S3"
32
- end
23
+ def upload(backup_file, key)
24
+ begin
25
+ s3_client.put_object(
26
+ bucket: ENV['S3_BACKUP_BUCKET'],
27
+ key: key,
28
+ body: File.open(backup_file)
29
+ )
30
+ rescue StandardError => e
31
+ puts "Error uploading backup to S3: #{e.message}"
32
+ raise e
33
+ end
34
+ 'File uploaded to S3'
35
+ end
33
36
 
34
- def remove_old_backups(basename, keep: 5)
35
- bucket = ENV['S3_BACKUP_BUCKET']
36
- all_items = s3_client.list_objects_v2(bucket:bucket, prefix: basename).contents
37
- count = all_items.count
38
- if count <= keep
39
- p 'Nothing to remove'
40
- return
41
- end
42
- items = all_items.sort_by(&:last_modified).reverse.slice(keep..-1).map(&:key)
43
- items.each do |item|
44
- p "Removing #{item} from S3"
45
- s3_client.delete_object(bucket: bucket, key: item)
46
- end
47
- end
37
+ def remove_old_backups(basename, keep: 5)
38
+ bucket = ENV['S3_BACKUP_BUCKET']
39
+ all_items = s3_client.list_objects_v2(bucket: bucket, prefix: basename).contents
40
+ count = all_items.count
41
+ if count <= keep
42
+ p 'Nothing to remove'
43
+ return
44
+ end
45
+ items = all_items.sort_by(&:last_modified).reverse.slice(keep..-1).map(&:key)
46
+ items.each do |item|
47
+ p "Removing #{item} from S3"
48
+ s3_client.delete_object(bucket: bucket, key: item)
49
+ end
48
50
  end
49
- end
51
+ end
52
+ end
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'capistrano/ops/backup/api'
2
4
  require 'capistrano/ops/backup/s3'
3
5
 
4
-
5
6
  module Backup
6
- class Error < StandardError; end
7
- end
7
+ class Error < StandardError; end
8
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BackupHelper
4
+ def backup_file_name(type)
5
+ regex = type == 'storage' ? "'.{0,}\.tar.gz'" : "'.{0,}\.dump'"
6
+ @backup_file_name ||= capture "cd #{shared_path}/backups && ls -lt | grep -E -i #{regex} | head -n 1 | awk '{print $9}'"
7
+ end
8
+
9
+ def backup_file_size
10
+ @backup_file_size ||= capture "cd #{shared_path}/backups && wc -c #{@backup_file_name} | awk '{print $1}'"
11
+ end
12
+
13
+ def download_backup(backup_file, type)
14
+ puts "Downloading #{type} backup"
15
+ download! "#{shared_path}/backups/#{backup_file}"
16
+ puts "Download finished\nDeleting temporary backup..."
17
+ cleanup_backup(backup_file, "Download finished\nDeleting temporary backup...")
18
+ end
19
+
20
+ def cleanup_backup(backup_file, message)
21
+ puts message
22
+ execute "cd #{shared_path}/backups && rm #{backup_file}"
23
+ puts 'Temporary backup deleted'
24
+ end
25
+
26
+ def question(question, default = 'n', &block)
27
+ print "#{question} #{default.downcase == 'n' ? '(y/N)' : '(Y/n)'}: "
28
+ input = $stdin.gets.strip.downcase
29
+ answer = (input.empty? ? default : input).downcase.to_s
30
+
31
+ if %w[y n].include?(answer)
32
+ block.call(answer == 'y')
33
+ else
34
+ question(question, default, &block)
35
+ end
36
+ end
37
+
38
+ def prepare_env
39
+ @env = "RAILS_ENV=#{fetch(:stage)}"
40
+ @path_cmd = "PATH=$HOME/.rbenv/versions/#{RUBY_VERSION}/bin:$PATH"
41
+ @test_command = "cd #{release_path} && #{@path_cmd} && #{@env}"
42
+ end
43
+
44
+ def size_str(size)
45
+ units = %w[B KB MB GB TB]
46
+ e = (Math.log(size) / Math.log(1024)).floor
47
+ s = format('%.2f', size.to_f / 1024**e)
48
+ s.sub(/\.?0*$/, units[e])
49
+ end
50
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../backup_helper'
4
+ namespace :backup do
5
+ namespace :database do
6
+ include BackupHelper
7
+ # Default to :app role
8
+ rake_roles = fetch(:rake_roles, :app)
9
+
10
+ desc 'create a backup of the server database'
11
+ task :create do
12
+ on roles(rake_roles) do
13
+ puts 'Creating backup...'
14
+ execute "#{prepare_env} BACKUPS_ENABLED=true bundle exec rake pg:dump"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../backup_helper'
4
+ namespace :backup do
5
+ namespace :database do
6
+ include BackupHelper
7
+ # Default to :app role
8
+ rake_roles = fetch(:rake_roles, :app)
9
+
10
+ desc 'pull latest database dump from server to local'
11
+ task :pull do
12
+ on roles(rake_roles) do
13
+ puts 'Creating temporary backup...'
14
+ execute "#{prepare_env} BACKUPS_ENABLED=true EXTERNAL_BACKUP_ENABLED=false bundle exec rake pg:dump"
15
+ puts "Backup created\nPrepare download..."
16
+ backup_file = backup_file_name('database')
17
+ backup_size = backup_file_size
18
+ question("Backup size: #{size_str(backup_size.to_i)}. Continue?", 'n') do |answer|
19
+ if answer
20
+ download_backup(backup_file, 'database')
21
+ else
22
+ cleanup_backup(backup_file, "Aborting...\nDeleting temporary backup...")
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../backup_helper'
4
+ namespace :backup do
5
+ namespace :storage do
6
+ include BackupHelper
7
+ # Default to :app role
8
+ rake_roles = fetch(:rake_roles, :app)
9
+
10
+ desc 'create storage dump on server'
11
+ task :create do
12
+ on roles(rake_roles) do
13
+ puts 'Creating backup...'
14
+ execute "#{prepare_env} BACKUPS_ENABLED=true EXTERNAL_BACKUP_ENABLED=false bundle exec rake storage:backup"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../backup_helper'
4
+ namespace :backup do
5
+ namespace :storage do
6
+ include BackupHelper
7
+ # Default to :app role
8
+ rake_roles = fetch(:rake_roles, :app)
9
+ desc 'pull latest storage dump from server to local'
10
+ task :pull do
11
+ on roles(rake_roles) do
12
+ puts 'Creating temporary backup...'
13
+ execute "#{prepare_env} BACKUPS_ENABLED=true EXTERNAL_BACKUP_ENABLED=false bundle exec rake storage:backup"
14
+ puts 'Backup created'
15
+ backup_file = backup_file_name('storage')
16
+ backup_size = backup_file_size
17
+
18
+ puts 'Prepare download...'
19
+
20
+ question("Backup size: #{size_str(backup_size.to_i)}. Continue?", 'n') do |answer|
21
+ if answer
22
+ download_backup(backup_file, 'storage')
23
+ else
24
+ cleanup_backup(backup_file, "Aborting...\nDeleting temporary backup...")
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,29 +1,25 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'backup/backup_helper'
4
+
3
5
  namespace :backup do
6
+ include BackupHelper
4
7
  # Default to :app role
5
8
  rake_roles = fetch(:rake_roles, :app)
6
9
 
7
- desc 'create a backup of the server database'
10
+ desc 'create a backup of the server database (deprecated, use backup:database:create instead)'
8
11
  task :create do
9
12
  on roles(rake_roles) do
10
- env = "RAILS_ENV=#{fetch(:stage)}"
11
- # rubocop:disable Layout/LineLength
12
- path_cmd = "PATH=$HOME/.rbenv/versions/#{RUBY_VERSION}/bin:$PATH"
13
- # rubocop:enable Layout/LineLength
14
- execute "cd #{release_path} && #{path_cmd} && #{env} BACKUPS_ENABLED=true bundle exec rake pg:dump"
13
+ warn "deprecated: use 'backup:database:create' instead, in future versions this task will be removed"
14
+ execute "#{prepare_env} BACKUPS_ENABLED=true EXTERNAL_BACKUP_ENABLED=false bundle exec rake pg:dump"
15
15
  end
16
16
  end
17
- desc 'pull latest database backups from server to local'
17
+ desc 'pull latest database backups from server to local (deprecated, use backup:database:pull instead)'
18
18
  task :pull do
19
19
  on roles(rake_roles) do
20
- # rubocop:disable Layout/LineLength
21
- execute "cd #{shared_path}/backups && tar -czf #{shared_path}/backups.tar.gz $(ls -lt | grep -E -i '.{0,}\.dump' | head -n 1 | awk '{print $9}')"
22
- # rubocop:enable Layout/LineLength
23
- download! "#{shared_path}/backups.tar.gz", 'backups.tar.gz'
24
- execute "rm #{shared_path}/backups.tar.gz"
25
- system 'tar -xzf backups.tar.gz'
26
- system 'rm backups.tar.gz'
20
+ warn "deprecated: use 'backup:database:pull' instead, in future versions this task will be removed"
21
+ backup_file = backup_file_name('database')
22
+ download! "#{shared_path}/backups/#{backup_file}"
27
23
  end
28
24
  end
29
25
  end