0

データベースを更新するために一部のワーカーに依存するWebアプリケーションの魔女があります。このワーカーは、インターネット経由でデータを取得し、対応するエントリを更新してから、更新されていないエントリを削除します。

スレッドを使用していたときは、実行がいつ行われたかを完全に制御できたので問題ありませんでした。スレッドは素晴らしいので resque に移動する必要がありますが、スケーラビリティを変更するには問題があったため、すべての古いスレッドがワーカーになりました。

それはうまく機能しますが、今私はこの問題を抱えています.ワーカーがいつ完了したかがわからないため、更新されていないエントリを削除するためにクリーンアップを呼び出すことができません.

私の古いコードは次のようになります。

Entry.update_all(updated: false)
Docs.update_all(updated: false)
Stuff.update_all(updated: false)

# ...
# My code that uses find_or_create_by_my_custom_id
# Entry.find_or_create_by_tag(20)
# ...

Entry.delete_all(updated: false)
Docs.delete_all(updated: false)
Stuff.delete_all(updated: false)

そして現在、resqueを使用して、開始したワーカー(すべてを開始するために呼び出されるメインワーカー)にこのセットアップを持っています:

Resque.enqueue(UpdateEntriesJob, params)
Resque.enqueue(UpdateDocsJob, params)
Resque.enqueue(UpdateStuffJob, params)

このタスクがいつ完了したかを制御するにはどうすればよいですか?

4

1 に答える 1

0

after_performフックをチェックしましたか

ワーカークラスに after_performer クラスメソッドを追加するだけです

class UpdateEntriesJob
   ..... 
   ....
   def self.perform
     ... 
     ...
     ...
   end
   ....
   ....
   ....

   def self.after_perform
      ...
      [Write your code over]
      ...
   end

end

これが理にかなっていることを願っています

于 2013-07-16T14:49:11.253 に答える