Mysql 用户。所有这些都需要5-10分钟的本地时间。请求超时以遍历每个

Mysql 用户。所有这些都需要5-10分钟的本地时间。请求超时以遍历每个,mysql,ruby-on-rails,rails-activerecord,sidekiq,Mysql,Ruby On Rails,Rails Activerecord,Sidekiq,我在数据库中有233997条记录供用户使用。迭代这个过程需要10分钟以上,我需要遍历每一个过程才能将作业发送到sidekiq。服务器在为每个用户创建作业之前超时。我该怎么办 User.find_each do |user| UpdateMembershipLevelWorker.perform_async(user.id) end 如何在不超时的情况下完成此请求?这是用户的问题。查找每个非常慢的部分。。。但对于200k记录来说,这可能是正常的。我认为您需要做的是,为您的用户循环建立一个后台

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

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

如何在不超时的情况下完成此请求?这是用户的问题。查找每个非常慢的部分。。。但对于200k记录来说,这可能是正常的。

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

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

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

end
(已从网站复制:))


在长时间运行的进程中,我通常会在后台运行它们,并将状态写入db表。因此,稍后我可以通过控制器请求向用户显示有关错误等的信息。

您是如何运行此操作的?这样就可以为每个用户的处理创建一个队列,然后为实际更新启动另一个队列?我可以试着把每个人都放进去。让我试着报告。我相信你可以用一个后台进程来完成所有事情,否则拥有233997不是一个好主意:)。谢谢,如果我遇到问题,这部作品(我想)会报告回来。非常感谢。只需添加一条注释,
#find_each
在每个循环中处理总共1000条记录,或者按照
:batch_size
选项的指示进行处理