我正在使用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还是新手,请阅读文档。我错过了什么?
答案 0 :(得分:5)
奇怪。我做同样的事情,除了使用self.class
而不是BotWorker
并且它有效。我对perform
方法没有任何论据。
您可能希望将方法包装在begin / rescue / ensure块中,并将重新排队移动到ensure块中。
如果User.find
无法找到用户,则会引发Sidekiq将捕获的错误,并应将您的作业移至重试队列中。可能不是你想要的。