【问题标题】:Why is Carrierwave-Backgrounder / Sidekiq triggering redundant image processing?为什么 Carrierwave-Backgrounder / Sidekiq 会触发冗余图像处理?
【发布时间】:2013-10-03 15:33:50
【问题描述】:

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

user.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)
INFO:开始处理,按 Ctrl-C 停止

CarrierWave::Workers::ProcessAsset JID-f2c19a1e33e83be2dce31961 信息:开始 CarrierWave::Workers::ProcessAsset JID-f2c19a1e33e83be2dce31961 信息:完成:0.733 秒 CarrierWave::Workers::ProcessAsset JID-a497e66f54609f76678db81a 信息:开始 CarrierWave::Workers::ProcessAsset JID-a497e66f54609f76678db81a 信息:完成:0.32 秒 CarrierWave::Workers::ProcessAsset JID-576dd9a036323e700e86860c 信息:开始 CarrierWave::Workers::ProcessAsset JID-576dd9a036323e700e86860c 信息:完成:0.588 秒

【问题讨论】:

  • 您的User 模型中可能存在“污染”icon 属性的内容。

标签: carrierwave sidekiq


【解决方案1】:

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

  1. avatar_changed?
  2. previous_changes.has_key?(:avatar)
  3. remote_avatar_url.present?
  4. avatar_cache.present?

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

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

【讨论】:

  • 我一直在得到这个,设置起来非常简单。但是,如果我编辑已经有图标的记录,修改完全不同的属性,然后保存,我仍然会看到 Redis 抛出大量错误。我不敢相信我是唯一注意到这一点的人。一定很简单,我做错了。
  • 完全有可能存在错误。如果您能提出简单的说明来复制问题,我相信维护人员会为报告感到高兴。
猜你喜欢
  • 1970-01-01
  • 2020-04-23
  • 2014-07-08
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-19
相关资源
最近更新 更多