我有一个rake任务,每天我应该加载10_000个用户和进程,就像这样
uptime = Sys::Uptime.days
batch = 10_000
Person.limit(batch).offset(batch*uptime).find_each do |p|
Namespace::UserWorker.perform_async(p.to_global_id)
end
结果是debuggin,我意识到find_eachs似乎忽略了我的限制和偏移,并加载了超过10000个用户。我该怎么办?使用each
代替find_each
?
答案 0 :(得分:2)
您需要的是批量分组,ActiveRecord有一个帮助:
http://apidock.com/rails/ActiveRecord/Batches/find_in_batches
batch_size = 1000
start = 0
Person.find_in_batches(batch_size:batch_size, start:start) do |p|
Namespace::UserWorker.perform_async(p.to_global_id)
end
答案 1 :(得分:1)
find_each
覆盖limit
和offset
条件,仅加载部分/批次数据。因此,在您的情况下,不要指定自己的limit
和offset
条件:
Person.find_each(batch_size: 10_000) do |p|
Namespace::UserWorker.perform_async(p.to_global_id)
end