2013-12-19 3 views
0

Я запускаю рубин на приложение rails, и в рамках определенного процесса мне нужно отправить почту пользователю через 10 минут после определенной операции, если возникает определенное условие.неустойчивые задачи с задержкой в ​​рубине на рельсах

я увидел, что драгоценный камень называется Руфус может быть использован для реализации этой (https://github.com/jmettraux/rufus-scheduler/blob/two/README.rdoc), и это выглядит здорово, чтобы просто сделать что-то вроде:

scheduler.in «3s» сделать пут «Привет ... Rufus end

Из того, что я понимаю, он работает в фоновом режиме в процессе работы в потоке памяти и запускает процесс в нужное время. Но, из того, что я понял, он не является постоянным, что создает для нас большую проблему, поскольку мы постоянно развертываем, а развертывание уничтожает существующий процесс, таким образом убивая поток и требуемое действие.

Может ли кто-нибудь предложить рабочий подход для этого, возможно, другой рамки, которая поддерживает постоянство или, возможно, использует существующий камень с некоторыми настройками?

спасибо, Alex

ответ

2

Использование sidekiq, это в основном очередь заданий и сохраняется работу в Redis БД, также имеет хороший веб-интерфейс, повторы и т.д. и т.п.

Для запуска запланированных заданий посмотрите на https://github.com/mperham/sidekiq/wiki/Scheduled-Jobs

YourAfterJobWorker.perform_in 10.minutes, user.id 

реализация вашего работника будет выглядеть

# app/workers/your_after_job_worker.rb 
class YourAfterJobWorker 
    include Sidekiq::Worker 

    def perform(user_id) 
    user = User.find(user_id) 
    TheAfterJobMailer.some_email(user).deliver if user.matches_your_condition? 
    end 
end 
+0

спасибо, чувак! работает отлично! – CallMeTheBreeze

+0

добро пожаловать! – lwe

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