重新处理大量回形针样式

Reprocessing large amount Paperclip styles

我有相当数量的回形针附件(~270k,图像),我想在其中添加另一种样式。这些都存储在带有雾的 S3 上。从最初的测试和一些餐巾纸计算来看,似乎需要大约 2 周的时间才能完成这项工作,这实际上是不可行的。

rake paperclip:refresh:missing_styles

感觉这里是显而易见的选择,但它似乎会尝试下载每个附件的所有样式,以确定它是否确实丢失了。因为我知道新样式总是缺失,所以这似乎是多余的。

到目前为止,我正在考虑将工作量分配给 10 名左右的工人

NUM_WORKERS = 10
PER_WORKER = (270_000 / NUM_WORKERS)

ranges = []
start = 1

NUM_WORKERS.times do 
  ranges << { start: start, batch: PER_WORKER }
  start += PER_WORKER
end

和 运行 每个范围使用 ActiveRecord Batch API.

一项抽取任务

所以我的问题是。

  1. 无论如何要改进这一点并从以前的经验中吸取教训
  2. 如果可以跳过只为新样式生成。也许 refresh:thumbnailsSTYLE 是更好的方法

提前致谢

编辑:

我结束了编写一个 rake 任务,该任务将每个附件排队到 sidekiq 低优先级队列和一个工作人员来出列和处理这些排队的作业。到目前为止,它运行良好,速度不是很快,但它超出了我的范围,并且以令人满意的方式在后台发生。这种方法也可以通过添加更多 rails 实例轻松并行化,因为它们每个都有自己的一组 Sidekiq worker

根据this guide,您只能手动重新处理特定样式,因此:

my_model.an_attachment.reprocess!(:a_certain_style)

你分担工作量的方法似乎可行。

我记得看到过一项服务的广告,该服务可以通过直接拉动和推动 from/to 您的 S3 存储来处理图像,也许这将是长期的解决方案,而不是您自己做繁重的工作。不过不记得服务的名称了。