capistrano-ops 0.2.3 → 0.2.4

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.
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