Class: Backup::S3
- Inherits:
-
Object
- Object
- Backup::S3
- Includes:
- S3Helper
- Defined in:
- lib/capistrano/ops/rails/lib/backup/s3.rb
Instance Attribute Summary collapse
-
#access_key_id ⇒ Object
Returns the value of attribute access_key_id.
-
#endpoint ⇒ Object
Returns the value of attribute endpoint.
-
#region ⇒ Object
Returns the value of attribute region.
-
#s3_resource ⇒ Object
Returns the value of attribute s3_resource.
-
#secret_access_key ⇒ Object
Returns the value of attribute secret_access_key.
Instance Method Summary collapse
-
#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']) ⇒ S3
constructor
A new instance of S3.
- #remove_old_backups(basename, keep: 5) ⇒ Object
- #upload(backup_file, key) ⇒ Object
Methods included from S3Helper
#get_current_month, #get_delete_items, #get_items_by_month, #get_months, #get_old_months
Constructor Details
#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']) ⇒ S3
Returns a new instance of S3.
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 10 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']) self.endpoint = endpoint self.region = region self.access_key_id = access_key_id self.secret_access_key = secret_access_key configuration = { region: region, access_key_id: access_key_id, secret_access_key: secret_access_key, force_path_style: true } configuration[:endpoint] = endpoint unless endpoint.nil? self.s3_resource = Aws::S3::Resource.new(configuration) end |
Instance Attribute Details
#access_key_id ⇒ Object
Returns the value of attribute access_key_id.
8 9 10 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8 def access_key_id @access_key_id end |
#endpoint ⇒ Object
Returns the value of attribute endpoint.
8 9 10 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8 def endpoint @endpoint end |
#region ⇒ Object
Returns the value of attribute region.
8 9 10 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8 def region @region end |
#s3_resource ⇒ Object
Returns the value of attribute s3_resource.
8 9 10 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8 def s3_resource @s3_resource end |
#secret_access_key ⇒ Object
Returns the value of attribute secret_access_key.
8 9 10 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 8 def secret_access_key @secret_access_key end |
Instance Method Details
#remove_old_backups(basename, keep: 5) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 37 def remove_old_backups(basename, keep: 5) all_items = s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).objects(prefix: basename).map do |item| { key: item.key, last_modified: item.last_modified } end all_items = all_items.sort_by { |hsh| hsh[:last_modified] }.reverse months = get_months(all_items) old_months = get_old_months(months) if old_months&.empty? || old_months.nil? puts 'No old months to remove' else old_months.each do |month| items = get_items_by_month(all_items, month) delete_items = get_delete_items(items, 1) puts "Removing #{month} from S3" delete_items.each do |item_obj| puts "Removing #{item_obj[:key]} from S3" s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).object(item_obj[:key]).delete end end puts 'Old months removed from S3' end current_month = get_current_month(all_items) current_month_delete_items = get_delete_items(current_month, keep) if current_month_delete_items&.empty? || current_month_delete_items.nil? puts 'No old backups to remove' exit(0) end current_month_delete_items.each do |item_obj| puts "Removing #{item_obj[:key]} from S3" s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).object(item_obj[:key]).delete end puts 'Old backups removed from S3' rescue Backup::Error => e puts "Remove failed: #{e.}" raise e end |
#upload(backup_file, key) ⇒ Object
27 28 29 30 31 32 33 34 35 |
# File 'lib/capistrano/ops/rails/lib/backup/s3.rb', line 27 def upload(backup_file, key) begin s3_resource.bucket(ENV['S3_BACKUP_BUCKET']).object(key).upload_file(backup_file) rescue Backup::Error => e puts "Upload failed: #{e.}" raise e end 'File uploaded to S3' end |