10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/active_storage/async_variants/process_job.rb', line 10
def perform(record, attachment_name, variant_name)
attachment = record.public_send(attachment_name)
@variant = attachment.variant(variant_name.to_sym)
variation = @variant.variation
@async_options = variation.async_options
transformer_class = @async_options[:transformer]
blob = @variant.blob
@variant_record = blob.variant_records.create_or_find_by!(variation_digest: variation.digest)
@variant_record.update!(state: "processing")
if transformer_class
transformer = transformer_class.new
if transformer.inline?
process_inline(blob, @variant_record, transformer, variation)
else
process_external(blob, @variant_record, transformer, variation)
end
else
process_default(blob, @variant_record, variation)
end
rescue => e
@variant_record&.update!(
state: "failed",
error: e.message.to_s.truncate(16_000),
attempts: (@variant_record&.attempts || 0) + 1,
)
raise
end
|