Ruby on Rails - 自动电子邮件发送 - 飞行提醒

时间:2014-01-22 17:10:21

标签: ruby-on-rails email cron delayed-job

我正在Rails创建航班预订网站。预订信息存储在下表中的数据库中:

USERNAME | 飞行 | 飞往 | 航班日期 | 飞行时间 | 与此任务无关的一些其他信息...... |

我希望在飞行日期之前的飞行时间之前一小时(或某个特定时间)发送电子邮件。这样做的最佳方法是什么?我正在研究Cron和delayed_job但是两者似乎都更多地基于间隔,而不是在特定的日期和时间执行工作。

请帮忙。 谢谢

2 个答案:

答案 0 :(得分:1)

最简单的方法是将cron作业设置为每10分钟运行一次,并通过数据库查询确定哪些航班现在需要提醒电子邮件。您可以在数据库中有一个附加字段,例如“REMINDER_SENT”,这样您只需发送一次电子邮件。

如果您已经在使用延迟作业,那么cron作业应该只调用一个ruby脚本,该脚本会将SendReminders作业添加到队列中。然后,您可以管理正常延迟作业中的所有数据库查询,电子邮件发送和数据库更新。

这种方法可以节省您排队大量未来日期事件的时间,而且您无需担心航班时间的变化或事件的丢失。如果您错过了一个活动,那么10分钟内的下一次活动将会收集所有航班。

答案 1 :(得分:0)

您是否需要提前一小时(或其他时间)发送完全的通知?

如果不是,我会创建一个调用rake任务的cron作业,比如每10分钟一次。此任务检查是否有通知到期并发送。如果您希望它们在60分钟前到达,使用这些设置,您可以提前60-70分钟的交付时间,考虑到垃圾邮件过滤器等的延迟,我认为这是合理的。

如果更频繁地(每分钟)调用脚本,精度会更高,但是您可能无法同时运行任务。