2014-01-03 2 views
4

Я использую 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 

Мой контроллер просто имеет

BotWorker.perform_async(user_id) 

Однако, на приборной панели Sidekiq, не похоже, что запланирован другой рабочий.

Также хотел бы отметить, что повторение является условным, поэтому не похоже, что я могу использовать sidetiq или какое-то расширение для sidekiq scheduling.

Еще новичок в Sidekiq, прочтите документацию. Что мне не хватает?

ответ

4

Странно. Я делаю то же самое, кроме self.class вместо BotWorker, и он работает. Однако у меня нет аргументов для моего метода perform.

Возможно, вы захотите обернуть свой метод в блок начала/спасения/обеспечения и переместить повторное размещение в блок обеспечения.

Если User.find не находит пользователя, он собирается поднять ошибку, которую Sidekiq поймает и должен переместить вашу работу в очередь Retry. Наверное, не то, что ты хочешь.

+0

Спасибо за это. Наконец, он получил работу, оказывается, мне пришлось перезапустить «sidekiq». Спасибо –

+0

Быстрый вопрос. Вы упомянули перемещение запроса в блок обеспечения. Но разве это не означает, что если User.find не работает, он будет повторять попытку? Я бы хотел, чтобы Sidekiq не повторялся, если User.find терпит неудачу. –

+0

@DelosChang Да, это было бы. Извините, если это не ваше намерение, не кладите его туда! Но вы все равно захотите поймать какие-либо ошибки, поэтому Sidekiq не нападет и не повторит попытку для вас. –

Смежные вопросы