ループ内に多くの関連オブジェクトを作成する非同期の 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
このループを書き直してメモリ使用量を最小限に抑える方法はありますか?