Rails 4 应用程序中的 Sendgrid API 和用户订阅逻辑

Sendgrid API and User Subscription Logic within a Rails 4 Application

我遇到了这个 post,看来我可以避免使用延迟作业 gem,这是首选。

申请基础:

问题:created/updated 关闭工单时会发送电子邮件,但最终会有 300 多个订阅用户收到电子邮件。我目前有大约 15 个测试用户,修改工单时,似乎每次都发送 15 个单独的请求:这在浏览器中非常慢(即,工单修改器可能在 create/update/close 之后等待 10+ 秒)单击按钮),但可以忍受。随着越来越多的用户订阅,这种缓慢将是无法容忍的。

Here 是完整的工单控制器,如果您想查看它:我意识到它相当重复并且不遵循 DRY 原则,当然可以重构。

我对如何实施感到困惑(来自上面的链接 SO post)

headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json

因为分类逻辑在控制器中,但是 app/mailers/user_notifier.rb 是定义电子邮件方法的地方,那不是 headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json 必须去的地方吗?

tickets_controller.rb 的第 219 行如下。

def grab_all_sub_emails
    @all_users = Subscription.where.not(name: '')
    @sub_emails = @all_users.includes(:categories).map { |user| user.slice(:phone_number, :name).merge(categories: user.categories.map(&:name))}
end

任何有关我需要如何修改我的 logic/implement headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json 以加快电子邮件发送过程的意见都将不胜感激。

您不需要遍历 @emails_for_email 并在每个上调用 UserNotifier,因为您已经在 X-SMTPAPI [=29] 中设置了 :to 键=].

只需将 array_of_recipients 传递给 UserNotifier,将其设置为 header:

def ticket_created(array_of_recipients)
  ...
  headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json
  ...
  mail
end

然后 SenGrid 将读取 X-SMTPAPI header,读取 :to 密钥并将消息传递给所有收件人。


我可以推荐使用 sendgrid-ruby gem 并将模板存储在 SendGrid 中吗?