Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 构建提醒电子邮件系统_Ruby On Rails_Email_Cron_Delayed Job - Fatal编程技术网

Ruby on rails 构建提醒电子邮件系统

Ruby on rails 构建提醒电子邮件系统,ruby-on-rails,email,cron,delayed-job,Ruby On Rails,Email,Cron,Delayed Job,我正在Rails 4.2中构建一个预订系统,在这个系统中,我需要以预定义的时间间隔向用户发送一组电子邮件(例如,他们有即将到来的预订、预订完成后的反馈、更改/取消现有预订的链接等)。我环顾四周,找到了,但我正试图在两种方法之间做出选择 我认为构建这个系统有两种主要方法 使用类似的队列系统。无论何时有人预订,我们都会将所有电子邮件排成队列,等待正确的发送时间 赞成:一个队列用于所有电子邮件。自动重试逻辑 缺点:数千封电子邮件最终会在系统中排队。每当有人取消预订时都需要排队(依赖:销毁与此相关的电子

我正在Rails 4.2中构建一个预订系统,在这个系统中,我需要以预定义的时间间隔向用户发送一组电子邮件(例如,他们有即将到来的预订、预订完成后的反馈、更改/取消现有预订的链接等)。我环顾四周,找到了,但我正试图在两种方法之间做出选择

我认为构建这个系统有两种主要方法

  • 使用类似的队列系统。无论何时有人预订,我们都会将所有电子邮件排成队列,等待正确的发送时间

    赞成:一个队列用于所有电子邮件。自动重试逻辑

    缺点:数千封电子邮件最终会在系统中排队。每当有人取消预订时都需要排队(依赖:销毁与此相关的电子邮件可能非常容易)。更复杂的逻辑是,我们需要电子邮件何时发出

  • cron
    +
    rake
    以预定义的间隔(每小时?每十五分钟?)运行并检查需要发送的电子邮件的任务。它运行一个类似“查找三天后的所有预订”的查询,然后发送所有电子邮件

    赞成:将所有内容放入应用程序逻辑,减少需要跟踪的状态量

    缺点:需要跟踪哪些电子邮件已经发送,这在概念上类似于我们上面已经创建的任何工作表


  • 第二种方法更好(如果在heroku上使用heroku调度程序),队列更适合“尽快运行”而不是“在此特定日期运行”

    使用延迟作业(或Sidekiq)的一个很好的优点是,您可以从站点动态更新作业(或重复作业)的计划

    您可以在站点中提供一个页面来更新定期作业。现在,默认情况下,延迟作业并不真正允许重复作业。不过,也有一些附加的宝石可能会引起人们的兴趣。如果计算能力不是问题,我总是更喜欢实际的作业处理器,而不是cron,因为它对我来说更易于管理。

    我使用了第二种方法(因为我从来没有想到第一种方法:p),不知何故,我觉得第二种方法更安全、更易于管理。依赖于延迟的作业在某种程度上并不安全,因为作业流程可能会下降,并且会像您所提到的那个样有更复杂的逻辑。