parent
764b89939f
commit
9660aa4543
@ -0,0 +1,12 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
class Api::V2::MediaController < Api::V1::MediaController |
||||||
|
def create |
||||||
|
@media_attachment = current_account.media_attachments.create!({ delay_processing: true }.merge(media_attachment_params)) |
||||||
|
render json: @media_attachment, serializer: REST::MediaAttachmentSerializer, status: 202 |
||||||
|
rescue Paperclip::Errors::NotIdentifiedByImageMagickError |
||||||
|
render json: file_type_error, status: 422 |
||||||
|
rescue Paperclip::Error |
||||||
|
render json: processing_error, status: 500 |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,34 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
class PostProcessMediaWorker |
||||||
|
include Sidekiq::Worker |
||||||
|
|
||||||
|
sidekiq_options retry: 1, dead: false |
||||||
|
|
||||||
|
sidekiq_retries_exhausted do |msg| |
||||||
|
media_attachment_id = msg['args'].first |
||||||
|
|
||||||
|
ActiveRecord::Base.connection_pool.with_connection do |
||||||
|
begin |
||||||
|
media_attachment = MediaAttachment.find(media_attachment_id) |
||||||
|
media_attachment.processing = :failed |
||||||
|
media_attachment.save |
||||||
|
rescue ActiveRecord::RecordNotFound |
||||||
|
true |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
Sidekiq.logger.error("Processing media attachment #{media_attachment_id} failed with #{msg['error_message']}") |
||||||
|
end |
||||||
|
|
||||||
|
def perform(media_attachment_id) |
||||||
|
media_attachment = MediaAttachment.find(media_attachment_id) |
||||||
|
media_attachment.processing = :in_progress |
||||||
|
media_attachment.save |
||||||
|
media_attachment.file.reprocess_original! |
||||||
|
media_attachment.processing = :complete |
||||||
|
media_attachment.save |
||||||
|
rescue ActiveRecord::RecordNotFound |
||||||
|
true |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,5 @@ |
|||||||
|
class AddProcessingToMediaAttachments < ActiveRecord::Migration[5.2] |
||||||
|
def change |
||||||
|
add_column :media_attachments, :processing, :integer |
||||||
|
end |
||||||
|
end |
@ -0,0 +1,30 @@ |
|||||||
|
# frozen_string_literal: true |
||||||
|
|
||||||
|
module Paperclip |
||||||
|
module AttachmentExtensions |
||||||
|
# We overwrite this method to support delayed processing in |
||||||
|
# Sidekiq. Since we process the original file to reduce disk |
||||||
|
# usage, and we still want to generate thumbnails straight |
||||||
|
# away, it's the only style we need to exclude |
||||||
|
def process_style?(style_name, style_args) |
||||||
|
if style_name == :original && instance.respond_to?(:delay_processing?) && instance.delay_processing? |
||||||
|
false |
||||||
|
else |
||||||
|
style_args.empty? || style_args.include?(style_name) |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
def reprocess_original! |
||||||
|
old_original_path = path(:original) |
||||||
|
reprocess!(:original) |
||||||
|
new_original_path = path(:original) |
||||||
|
|
||||||
|
if new_original_path != old_original_path |
||||||
|
@queued_for_delete << old_original_path |
||||||
|
flush_deletes |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
Paperclip::Attachment.prepend(Paperclip::AttachmentExtensions) |
Loading…
Reference in new issue