消耗大量数据的 Rake 任务冻结
我有一个简单的 rake 任务,它通过 ActiveRecord 消耗大量数据。 (联系人有约 47k 行)
Contact.all.each do |contact| contact.update_attribute ... end
当我运行该任务时,约 400 行被更新,然后任务卡住了。没有错误,也没有数据库活动...
我如何使其正常工作?
I have a simple rake task which consumes pretty much data via ActiveRecord. (contacts has ~47k rows)
Contact.all.each do |contact| contact.update_attribute ... end
When I run that task ~400 rows get updated and then the task stucks. No errors and no database activity at all...
How do I make this work properly?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这正是 find_in_batches 的目的。它将立即消除内存中大量的 ActiveRecord 对象。
http://ryandaigle. com/articles/2009/2/23/what-s-new-in-edge-rails-batched-find
This is exactly what find_in_batches is intended for. It will eliminate an enormous number of ActiveRecord objects in memory at once.
http://ryandaigle.com/articles/2009/2/23/what-s-new-in-edge-rails-batched-find