Sidekiq在完成后安排同一个工作人员排队

时间:2014-01-03 01:01:25

标签: ruby-on-rails sidekiq

我正在使用Sidekiq和Rails 3,以及以下工人类:

class BotWorker
   include Sidekiq::Worker

   def perform(user_id)
      user = User.find(user_id)
      puts user.email

      if condition # always true for now
           BotWorker.perform_in(1.hour, user_id) # not working
      end
   end
end

我的控制器只是

BotWorker.perform_async(user_id)

然而,在Sidekiq仪表板上,似乎并没有安排另一名工人。

还要注意,重复是有条件的,因此我似乎不能使用sidetiq或某些sidekiq调度扩展。

Sidekiq还是新手,请阅读文档。我错过了什么?

1 个答案:

答案 0 :(得分:5)

奇怪。我做同样的事情,除了使用self.class而不是BotWorker并且它有效。我对perform方法没有任何论据。

您可能希望将方法包装在begin / rescue / ensure块中,并将重新排队移动到ensure块中。

如果User.find无法找到用户,则会引发Sidekiq将捕获的错误,并应将您的作业移至重试队列中。可能不是你想要的。