mirror of
https://github.com/System-End/cdn.git
synced 2026-04-19 23:22:53 +00:00
56 lines
1.4 KiB
Ruby
56 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
namespace :storage do
|
|
desc "Phase 2: Delete old keys (run after deploy)"
|
|
task delete_old_keys: :environment do
|
|
require "aws-sdk-s3"
|
|
|
|
key_file = Rails.root.join("tmp/old_storage_keys.txt")
|
|
unless File.exist?(key_file)
|
|
puts "No old keys file found at #{key_file}"
|
|
puts "Run storage:copy_to_public_keys first."
|
|
exit 1
|
|
end
|
|
|
|
old_keys = File.read(key_file).split("\n").reject(&:blank?)
|
|
puts "Found #{old_keys.size} old keys to delete"
|
|
|
|
if old_keys.empty?
|
|
puts "Nothing to delete."
|
|
exit 0
|
|
end
|
|
|
|
service = ActiveStorage::Blob.service
|
|
unless service.is_a?(ActiveStorage::Service::S3Service)
|
|
puts "This task only works with S3/R2 storage. Current service: #{service.class}"
|
|
exit 1
|
|
end
|
|
|
|
client = service.client.client
|
|
bucket = service.bucket
|
|
|
|
deleted = 0
|
|
errors = []
|
|
|
|
old_keys.each_with_index do |key, idx|
|
|
print "\r[#{idx + 1}/#{old_keys.size}] Deleting..."
|
|
|
|
begin
|
|
client.delete_object(bucket: bucket.name, key: key)
|
|
deleted += 1
|
|
rescue StandardError => e
|
|
puts "\n ERROR deleting #{key}: #{e.message}"
|
|
errors << { key: key, error: e.message }
|
|
end
|
|
end
|
|
|
|
puts "\nDeleted: #{deleted}, Errors: #{errors.size}"
|
|
|
|
if errors.empty?
|
|
File.delete(key_file)
|
|
puts "Cleanup complete!"
|
|
else
|
|
errors.each { |err| puts " - #{err[:key]}: #{err[:error]}" }
|
|
end
|
|
end
|
|
end
|