【问题标题】:Reprocessing large amount Paperclip styles重新处理大量回形针样式
【发布时间】:2015-06-13 01:57:40
【问题描述】:

我有相当数量的回形针附件(~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 为每个范围运行一个 rake 任务。

所以我的问题是。

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

提前谢谢你

编辑:

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

【问题讨论】:

    标签: ruby-on-rails amazon-s3 paperclip fog


    【解决方案1】:

    根据this guide,您只能手动重新处理某种样式:

    my_model.an_attachment.reprocess!(:a_certain_style)
    

    您拆分工作负载的方法似乎可行。

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

    【讨论】:

    • 我目前正在考虑将这些作为 270k sidekiq 作业运行在低优先级队列上,而不是作为 rake 任务。我担心在应用本身旁边的实例上按原样运行它的影响。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多