我有一个 rake 任务,我需要在后台运行 Heroku 作为一次性任务。然而,任务非常大,我遇到了“错误 R14(超出内存配额)”,希望我能得到一些关于如何避免这种情况的提示。
本质上,该任务查看 Products 表并查找没有图像的产品 Product.where(images: nil)
.
然后任务循环遍历每个条目;使用 product.url
它打开与远程网站的连接(使用 Nokogiri)并提取图像和一些附加数据。使用 mini_magick 调整图像大小并使用载波保存到 S3 Bucket。
我有大约 39000 条记录需要处理,但是在大约 500 条记录之后,我收到“超出内存配额”错误并且任务停止。
我可以理解为什么这是一项内存密集型任务,但我想知道是否有人可以指出我如何在处理和保存每条记录后(甚至每 100 条记录后)清理内存的正确方向.
或者/另外,有没有办法在 Heroku 任务自动终止后自动重启它?
最佳答案
您是否遍历每条记录,您可以强制 GC 启动:
Products.where(images: nil).each_with_index do |image, index|
if index % 100 == 0
GC.start
end
end
关于ruby-on-rails - 如何清除长时间运行的 rake 任务的内存以防止超出 Heroku 的内存配额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46503567/