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