2

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

如果用户在 48 小时内没有回来,我想向他们发送一封电子邮件 - 最好使用 、 或 来执行crondelayed_job操作whenever

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

您对此有何建议?

4

1 回答 1

5

首先,Whenever 和 Cron 是同义词。一切为您提供了一种使用 Ruby 编写 cronjobs 的方法(这太棒了,我喜欢Whenever)。

Delayed_job 不是这里的答案。你肯定想使用 cronjobs。在您的 Application 模型上创建一个方法,该方法将获取具有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
于 2011-10-10T00:25:00.377 回答