'updated_at'变为当前时间前2小时的电子邮件通知

时间:2012-05-19 03:43:10

标签: ruby-on-rails ruby ruby-on-rails-3

如果SomeModel尚未更新2小时,我想发送电子邮件通知。 实施它的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

保存模型后,将后台作业排队,从该时间开始运行2小时以发送电子邮件。当新作业入队时,删除仍在队列中的所有仍未运行的作业。

resque-scheduler提供程序是一种非常简单的方法,假设您已经启动并运行。

答案 1 :(得分:1)

就个人而言,我发现@ x1a4建议有点矫枉过正的解决方案。鉴于相对较大的2小时窗口,我会定期运行一个工作(比如每10-15分钟一次),然后在所有模型中搜索updated_at< = 2.hours.ago并发送电子邮件。

至于安排该作业每15分钟运行一次,有几种选择。如果您使用的是Resque,则可以使用resque-scheduler。您也可以使用标准系统cron,但每次作业运行时都会在启动Rails时产生相当大的开销。我也have written a distributed scheduler gem(即可以在多台机器上运行的cron,但它只在一台机器上运行),它在引擎盖下使用Redis。