我有一个异步 Resque 作业,它在一个循环中创建了许多关联的对象,我似乎无法避免 heroku 一直流行的 R14 错误。
has_many :associated_things
...
def populate_things
reference_things = ReferenceThings.where(some_criteria).map(&:name) # usually between 10 k and 20k strings
reference_things.each do |rt|
self.associated_things << AssociatedThing.create name: rt
end
end
我尝试过的一些事情:
- 将创建循环包装在一个
ActiveRecord::Base.uncached
块中 GC.start
在循环结束时手动运行- 添加
each_slice
之前.each
有没有办法重写这个循环来最小化内存使用?