Checking for active storage blob file presence
Montag, 31. August 2020, 14:26 Uhr | roberto@vasquez-angel.de |ActiveRecord::Base.logger.level = 1
storage_service = ObjectSpace.each_object(ActiveStorage::Service::S3Service).first
(ActiveStorage::Attachment.pluck(:record_type).uniq - ["Em::Compare::Checkouts::PointOfDelivery"]).each do |klass|
model = klass.constantize
puts "#{klass}"
puts "=" * 80
associations = model.reflect_on_all_associations.select { |a| a.class_name == "ActiveStorage::Attachment" }
associations.each do |association|
storage_name = association.name.to_s.split("_").first.to_sym
puts "#{storage_name}"
puts "-" * 80
records = model.joins(association.name).distinct
records.find_each do |record|
puts "#{model}##{record.id}"
puts "-" * 80
blobs = [record.send(storage_name)].flatten.map(&:blob)
blobs.each do |blob|
if storage_service.exist?(blob.key)
puts "Blob key #{blob.key} exists"
else
puts "Blob key #{blob.key} missing"
end
end
end
end
end
ActiveRecord::Base.logger.level = 0