# frozen_string_literal: true # Provides asynchronous generation of image previews for ActiveStorage::Blob records. class ActiveStorage::PreviewJob < ActiveStorage::BaseJob queue_as :assets discard_on StandardError do |job, error| blob = ActiveStorage::Blob.find_by(id: job.arguments.first) ActiveRecord::Base.no_touching do blob&.attachments&.take&.record&.update(file_processing: false) end Rails.logger.error "Couldn't generate preview for Blob with id: #{job.arguments.first}. Error:\n #{error}" end discard_on ActiveRecord::RecordNotFound retry_on ActiveStorage::IntegrityError, attempts: 3, wait: :exponentially_longer def perform(blob_id) blob = ActiveStorage::Blob.find(blob_id) preview = blob.representation(resize_to_limit: Constants::MEDIUM_PIC_FORMAT).processed Rails.logger.info "Preview for the Blod with id: #{blob.id} - successfully generated.\n" \ "Transformations applied: #{preview.variation.transformations}" preview = blob.representation(resize_to_limit: Constants::LARGE_PIC_FORMAT).processed Rails.logger.info "Preview for the Blod with id: #{blob.id} - successfully generated.\n" \ "Transformations applied: #{preview.variation.transformations}" ActiveRecord::Base.no_touching do blob.attachments.take.record.update(file_processing: false) end end end