delayed_job vs. cron

ssc*_*rus 2 cron ruby-on-rails whenever delayed-job ruby-on-rails-3

我有一个系统,用户进入一个包含多个部分的应用程序进程 - 有时用户会保存他们的进度并稍后再回来.

我想向用户发送电子邮件,如果他们没有在48小时内回来-这将是最好做到这一点使用cron,delayed_jobwhenever

我注意到,每当我在控制台中运行操作(例如bundle installrake db:migrate)时,它也运行cron,这让我怀疑我们可能有用户在同一天获得多个提醒的情况.

你有什么建议吗?

bri*_*ker 5

首先,每当和Cron是同义词.All Whenever提供了一种使用Ruby编写cronjobs的方法(这很棒,我喜欢Whenever).

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
Run Code Online (Sandbox Code Playgroud)

而你的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
Run Code Online (Sandbox Code Playgroud)

使用随时创建此cron:

every :day, :at => '8am' do
  runner 'Application.notify_stale_applicants'
end
Run Code Online (Sandbox Code Playgroud)