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/ )

長時間実行されるプロセスで通常行うことは、それらをバックグラウンドで実行し、ステータスを db テーブルに書き込むことです。そのため、後でエラーなどについてユーザーに表示できます。

于 2013-02-01T04:26:11.923 に答える