完成所有任务后,请在救援中调用清理任务

时间:2013-07-16 13:05:51

标签: ruby resque

我有一个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)

如何控制何时完成此任务?

1 个答案:

答案 0 :(得分:0)

您是否检查了after_perform挂钩

在您的worker类中添加一个after_performer类方法

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

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

end

希望这有意义