我已将Delayed::Paperclip配置为在后台处理 Paperclip 附件。我安装并配置了 Resque,根据自述文件,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 放在上面时,它就可以工作了。优先级似乎是硬编码的,但我认为如果是这样的话,我不能是唯一一个遇到这个问题的人。这是一个错误还是我错过了什么?