バックグラウンドで Paperclip の添付ファイルを処理するようにDelayed::Paperclipを構成しました。Resque をインストールして構成しました。README によると、Resque はバックグラウンド タスクを処理するようになりました。
Resque が稼働中であることを確認してください。ジョブは :paperclip キューにディスパッチされるため、ワーカーを正しくディスパッチできます。resque とワーカーを他の場合とまったく同じように構成します。
ただし、バックグラウンド タスクを実行するための別のフレームワークである Active Job は、Rails 4.1/ActionMailer の依存関係としてインストールされ、Resque からタスクを「盗みます」。
[ActiveJob] Enqueued DelayedPaperclip::Jobs::ActiveJob (Job ID: ba60f576-e544-4f53-8db2-eb0085f1f653) to Inline(paperclip) with arguments: "Photo", 79, "picture"
問題は、Active Job が同じスレッドですぐに実行されているように見えることです。基本的に、バックグラウンドではまったく実行されません。
Delayed::Paperclip のコードを調べたところ、インストールされているバックエンドに優先順位があるようです:
def detect_background_task
return DelayedPaperclip::Jobs::ActiveJob if defined? ::ActiveJob::Base
return DelayedPaperclip::Jobs::DelayedJob if defined? ::Delayed::Job
return DelayedPaperclip::Jobs::Resque if defined? ::Resque
return DelayedPaperclip::Jobs::Sidekiq if defined? ::Sidekiq
end
それらを入れ替えてResqueを上に置くと、うまくいきます。優先度はハードコーディングされているようですが、そうであれば、この問題を抱えているのは私だけではないと思います。これはバグですか、それとも何か不足していますか?