我在数据库中为用户提供了233_997条记录。迭代这需要10多分钟,我需要通过每个人向sidekiq发送一份工作。服务器在为每个用户创建作业之前超时。我该怎么办?
User.find_each do |user|
UpdateMembershipLevelWorker.perform_async(user.id)
end
如何在不超时服务器的情况下完成此请求?这是User.find_each部分非常慢......但也许这是正常的200k记录。
答案 0 :(得分: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/)
我通常在长时间运行的进程中执行的操作是,在后台运行它们并将状态写入db表。所以稍后我可以向用户显示错误等。