0

我在数据库中有 233_997 条记录供用户使用。遍历这个需要 10 多分钟,我需要遍历每一个才能将工作发送到 sidekiq。服务器在为每个用户创建作业之前超时。我该怎么办?

User.find_each do |user|
  UpdateMembershipLevelWorker.perform_async(user.id)
end

如何在不使服务器超时的情况下使此请求通过?这是 User.find_each 部分非常慢......但也许这对于 200k 记录是正常的。

4

1 回答 1

1

我认为您需要做的是,为您的用户循环有一个后台进程(通过 sidekiq,因为您已经在使用它)。

# app/workers/hard_worker.rb
class HardWorker
  include Sidekiq::Worker

  User.find_each do |user|
   UpdateMembershipLevelWorker.perform_async(user.id)
  end 

end

(从网站复制 :) http://mperham.github.com/sidekiq/

我通常在长时间运行的进程中做的是,在后台运行它们并将状态写入数据库表。所以后来我可以向用户展示错误等。

于 2013-02-01T04:26:11.923 回答