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

时间:2016-04-01 13:12:43

标签: ruby-on-rails sendgrid

我遇到了这个post,似乎我可以避免使用延迟的job gem,这是首选的。

申请基础:

  • 有线电视公司的停电通知系统
  • 当属性(或属性)发生中断时,会创建故障单
  • 有超过2000个属性,因此根据业务类型和地理位置将属性拆分为8个类别
  • 用户可以订阅8个潜在类别
  • 只有某些用户才能创建门票。
  • 当创建,更新或关闭故障单时,如果用户订阅了该房产所属的某个类别,则会收到电子邮件/短信通知。

问题:在创建/更新故障单时,正在发送电子邮件,但最终将有300多个订阅用户接收电子邮件。我目前有大约15个测试用户,当修改故障单时,每次都会发送15个单独的请求:这在浏览器中非常慢(即,故障修改器可能在创建/更新/关闭后等待10秒以上单击按钮),但可以忍受。随着越来越多的用户订阅,这种缓慢是不可容忍的。

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

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

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

我真诚地感谢任何有关如何修改我的逻辑/工具headers["X-SMTPAPI"] = { :to => array_of_recipients }.to_json以加快电子邮件处理流程的输入。

1 个答案:

答案 0 :(得分:1)

由于您已经在@emails_for_email标头中设置了UserNotifier密钥,因此您无需在:to上进行迭代并在每个网站上调用X-SMTPAPI

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

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

SenGrid将读取X-SMTPAPI标题,阅读:to密钥并将消息发送给所有收件人。

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