mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-12-30 20:23:14 +08:00
33 lines
1.4 KiB
Ruby
33 lines
1.4 KiB
Ruby
# 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
|