0

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

4

2 回答 2

1

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

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

于 2012-05-19T03:48:40.503 回答
1

我个人认为@x1a4 提出的解决方案有些矫枉过正。鉴于 2 小时的相对较大的窗口,我会定期运行一项作业(例如,每 10-15 分钟一次),然后在所有模型中搜索 updated_at <= 2.hours.ago 并发送电子邮件。

至于安排该作业每 15 分钟运行一次,有几个选项。如果您使用的是 Resque,则可以使用resque-scheduler 。您也可以使用标准的系统 cron,但每次作业运行时启动 Rails 都会产生相当大的开销。我还编写了一个分布式调度程序 gem(即可以在多台机器上运行的 cron,但就像它只在一台机器上运行一样),它在后台使用 Redis。

于 2012-05-19T04:23:06.053 回答