我在数据库中有 233_997 条记录供用户使用。遍历这个需要 10 多分钟,我需要遍历每一个才能将工作发送到 sidekiq。服务器在为每个用户创建作业之前超时。我该怎么办?
User.find_each do |user|
UpdateMembershipLevelWorker.perform_async(user.id)
end
如何在不使服务器超时的情况下使此请求通过?这是 User.find_each 部分非常慢......但也许这对于 200k 记录是正常的。
我在数据库中有 233_997 条记录供用户使用。遍历这个需要 10 多分钟,我需要遍历每一个才能将工作发送到 sidekiq。服务器在为每个用户创建作业之前超时。我该怎么办?
User.find_each do |user|
UpdateMembershipLevelWorker.perform_async(user.id)
end
如何在不使服务器超时的情况下使此请求通过?这是 User.find_each 部分非常慢......但也许这对于 200k 记录是正常的。
我认为您需要做的是,为您的用户循环有一个后台进程(通过 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/)
我通常在长时间运行的进程中做的是,在后台运行它们并将状态写入数据库表。所以后来我可以向用户展示错误等。