delayed_job против cron - PullRequest
       25

delayed_job против cron

2 голосов
/ 10 октября 2011

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

Я хочу отправить пользователям электронное письмо, если онине вернулся через 48 часов - лучше ли было бы сделать это, используя cron, delayed_job или whenever?

Я заметил, что всякий раз, когда я запускаю операции в консоли (например,как bundle install или rake db:migrate) он также запускает cron, что вызывает у меня подозрение, что у нас могут быть случаи, когда пользователи получают несколько напоминаний в один и тот же день.

Каковы ваши рекомендации для этого?

1 Ответ

5 голосов
/ 10 октября 2011

Прежде всего, Всякий раз, когда и Крон являются синонимами.Все, что когда-либо делает, - это предоставляет вам возможность писать cronjobs, используя Ruby (это здорово, я люблю Everyever).

Delayed_job здесь не является ответом.Вы определенно хотите использовать cronjobs.Создайте метод в своей модели приложений, который получит приложения, имеющие значение updated_at < 2.days.ago, и отправит их по электронной почте своему заявителю.

def notify_stale_applicants
  @stale_applications = Application.where('updated_at < ?', 2.days.ago) # or 48.hours.ago
  @stale_applications.each do |app|
    UserMailer.notify_is_stale(app).deliver
  end
end

И вашему UserMailer:

def notify_is_stale(application)
  @application = application
  mail(:to => application.user.email, :from => "Application Status <status@yourdomain.com>", :subject => "You haven't finished your Application!"
end

Использование при создании этого cron:

every :day, :at => '8am' do
  runner 'Application.notify_stale_applicants'
end
...