我有一个系统,用户可以在其中完成包含多个部分的申请流程 - 有时用户会保存进度并稍后再回来。
如果用户在 48 小时内没有回来,我想向他们发送一封电子邮件 - 最好使用 cron
、delayed_job
或何时
?
我注意到,每当我在控制台中运行操作(例如 bundle install
或 rake db:migrate
)时,它也会运行 cron,这让我很怀疑我们可能会遇到用户在同一天收到多个提醒的情况。
您对此有何建议?
最佳答案
首先,Whenever 和 Cron 是同义词。 Every Every 所做的一切就是为您提供一种使用 Ruby 编写 cronjobs 的方法(这太棒了,我喜欢 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 <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="abd8dfcadfded8ebd2c4ded9cfc4c6cac2c585c8c4c6" rel="noreferrer noopener nofollow">[email protected]</a>>", :subject => "You haven't finished your Application!"
end
使用when来创建这个cron:
every :day, :at => '8am' do
runner 'Application.notify_stale_applicants'
end
关于ruby-on-rails - 延迟作业与 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707484/