1

我正在使用带有 Sidekiq 的 Carrierwave-Backgrounder 来处理用户图标。不幸的是,每次我更新 User 模型时,它都会触发 CarrierWave::Workers::ProcessAsset 来处理现有图像。有没有办法让后台程序仅在用户有图标或更改现有图标时运行?我什么都试过了...

用户.rb

class User < ActiveRecord::Base  
  mount_uploader :icon, IconUploader
  process_in_background :icon

icon_uploader.rb

class IconUploader < CarrierWave::Uploader::Base
  include ::CarrierWave::Backgrounder::Delay

信息:使用带有选项的 redis://localhost:6379/0 引导 Sidekiq 2.14.1
信息:在 ruby​​ 2.0.0p247 中运行(2013-06-27 修订版 41674)
信息:开始处理,按 Ctrl-C 停止

CarrierWave :: Workers :: ProcessAsset JID-F2C19A1E3E83BE2DCE31961信息:启动CarrierWave :: Workers :: ProcessAsset JID-F2C19A1E33E83E83BE2DCE31961信息-a497e66f54609f76678db81a 信息:完成:0.32 秒 CarrierWave::Workers::ProcessAsset JID-576dd9a036323e700e86860c 信息:启动 CarrierWave::Workers::ProcessAsset JID-576dd9a036323e700e86860c 信息:完成:0.58 秒

4

1 回答 1

1

随着宝石的发展,carrierwave-backgrounder 非常简单。他们仅在字段已“更新”时才将作业排入队列,其中“更新”定义为以下任何一项为真:

  1. 头像变了?
  2. previous_changes.has_key?(:avatar)
  3. remote_avatar_url.present?
  4. avatar_cache.present?

如果您通过分配更改头像,则适用 1 和 2,如果您让人们粘贴 URL,则适用 3,如果您要缓存表单重新加载之间的更改,则适用 4。

如果您绝对确定这些都不是,并且您仍然在每次保存时看到工作,您可能希望在他们的问题跟踪器上创建一个问题。

于 2013-09-27T13:40:53.920 回答