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

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

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

我看到了构建这个系统的两种主要方法。

  • 使用像 delayed_job 这样的队列系统.每当有人进行预订时,我们都会将所有电子邮件排队等待发送的正确时间。

    优点:所有电子邮件都在一个队列中。自动重试逻辑。

    缺点:数以千计的电子邮件最终会在系统中排队。每当有人取消预订时都需要出队(依赖:销毁与之相关的电子邮件可能很容易)。关于我们需要什么时间发送电子邮件的更复杂的逻辑。
  • cron + rake以某个预定义的时间间隔(每小时?每十五分钟?)运行并检查需要发送的电子邮件的任务。它运行类似“查找三天后的所有预订”这样的查询,然后发送所有电子邮件。

    优点:将所有内容都放入应用程序逻辑中,减少我们需要跟踪的状态量。

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

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

    关于ruby-on-rails - 构建提醒电子邮件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32086498/

    相关文章:

    node.js - 如何在 sendgrid v3 node.js 中向多个收件人发送电子邮件

    java - 一个月中倒数第二个星期的 Cron 表达式

    ruby-on-rails - Rails 中 require、require_dependency 和常量重载有何关系?

    android - 什么时候做 - java.io.FileNotFoundException : No content provider?

    ruby-on-rails - 只有一行的表的 Rails 约定

    java - 如何解决错误 :javax. 邮件不存在?

    meteor - synced-cron 运行一次 - Meteor

    linux - 为什么部分脚本无法在crontab中执行

    ruby-on-rails - Rails ActiveStorage url_for 返回一个无效的 URL

    mysql - 在 Mac 上安装 MySQL2 gem 失败