2014-01-22 81 views
0

我在Rails中创建航班预订网站。预订信息存储在下表中的数据库中:Ruby on Rails - 自动电子邮件发送 - 航班提醒

USERNAME | 飞行从 | 飞往 | 飞行日期 | 飞行时间 | 一些与此任务无关的附加信息... |

我正在寻找一个日期航班飞行的时间之前发送电子邮件小时(或某些特定的时间)。最好的方法是什么?我正在研究Cron和delayed_job,但是两者似乎都是基于间隔而不是在特定日期和时间执行工作。

请帮忙。 谢谢

+0

您可能需要提供关于您在哪里托管Rails应用程序的详细信息,以供人们在此帮助您。 – tommyd456

+0

谢谢tommyd456, 它将在Heroku上托管。 –

回答

1

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

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

这种方法可以节省您不必排队等待大量未来日期的事件,而且您无需担心航班时间变更或事件丢失。如果你错过了一场比赛,那么在10分钟内的下一场比赛无论如何都会选择所有的航班。

0

是否需要提前一小时(或另一次)发送这些通知正好

如果没有,我会创建一个调用rake任务的cron作业,比如说每10分钟一次。此任务会检查是否有通知应付并发送。如果您希望他们在60分钟前到达,由于垃圾邮件过滤器所带来的延迟等原因,使用这些设置,您的交付时间将提前60-70分钟,我认为这是合理的。

如果您更频繁地(每分钟)调用脚本,精确度会更高,但您可能在并发运行任务时遇到问题。