2016-10-20 4 views
0

Вот чего я пытаюсь достичь: Как пользователь я могу забронировать место для класса. Если класс уже заполнен, я буду в списке ожидания. Когда появится новое место, я получаю электронное письмо. С этого момента приложение начинает фоновое задание, которое будет «ждать» 24 часа. Если я не подтвердил, что я занимаю место до 24 часов, это приписывается следующему лицу в списке ожидания, которому также необходимо будет подтвердить до 24 часов.Начните работу с другого места

Проблема заключается в том, чтобы передать место следующему человеку в списке: поскольку я уже в «задании таймера», мне нужно позвонить ему снова со следующим человеком.

class TimerJob 
    def perform(user_id) 
    send_confimation_email 
    if #didn't confirm before 24h 
     TimerJob.perform(next_user_on_list_id) 
    else 
     # save his spot 
    end 
    end 
end 

Первое задание отлично работает, он посылает по электронной почте, ожидает подтверждения в течение 24 часов, а затем отправляет еще одно письмо к следующему человеку в списке, но не запускается на другую работу (строка 5). Поэтому он не начнет процесс снова, если закончится 24-часовое ожидание.

Итак, вопрос будет следующим: как я могу назвать работу в задании, как в моем примере? Есть ли причина, почему это не работает?

Или я слишком усложняю это, и свежий глаз будет иметь более легкое решение?

Я думал о вызове module из задания, которое в основном вызовет задание. Но то же самое здесь, не получилось. Любой вход будет очень оценен.

+0

Вы используете sidekiq? – Jayaprakash

+0

@Jayaprakash да я –

+0

Можете ли вы попробовать это? "TimerJob.new.perform (next_user_on_list_id)" или "TimerJob. Perform_async (next_user_on_list_id)" – Jayaprakash

ответ

0

Код, который вы опубликовали, должен работать с точки зрения размещения задания, однако из кода, который вы опубликовали, не ясно, в какой момент происходит процесс ожидания 24 часа вашего рабочего процесса. Похоже, что ваш TimerJob отправляет электронное письмо, а затем сразу проверяет наличие подтверждения.

На мой взгляд, было бы разумнее отправить электронное письмо сразу после регистрации и поставить в очередь на работу с TimerJob.perform_in(24.hours, next_user_id), который проверяет, подтверждено ли электронное письмо. Тогда, если это не так, вы можете отправить другое электронное письмо/очередь на другую работу за 24 часа.

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

  • Нет связанных вопросов^_^