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

Del*_*ang 4 ruby-on-rails sidekiq

我正在使用带有Rails 3的Sidekiq,以及以下工作者类:

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
Run Code Online (Sandbox Code Playgroud)

我的控制器只是

BotWorker.perform_async(user_id)
Run Code Online (Sandbox Code Playgroud)

但是,在Sidekiq仪表板上,似乎没有计划另一名工人.

还要注意,重复是有条件的,所以我似乎不能使用sidetiq或一些sidekiq调度扩展.

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

Phi*_*rom 5

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

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

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