Rails 4 应用程序中的 Sendgrid API 和用户订阅逻辑
Sendgrid API and User Subscription Logic within a Rails 4 Application
我遇到了这个 post,看来我可以避免使用延迟作业 gem,这是首选。
申请基础:
- 有线电视公司的中断通知系统
- 当 属性(或属性)发生中断时,将创建一个票证
- 有超过 2000 个属性,因此根据业务类型和地理位置将属性分为 8 个类别
- 一个用户可以订阅 8 个潜在类别
- 只有特定用户可以创建工单。
- 创建、更新或关闭工单时,如果用户订阅了 属性 所属的类别之一,他们将收到 email/sms 通知。
问题: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 中吗?
我遇到了这个 post,看来我可以避免使用延迟作业 gem,这是首选。
申请基础:
- 有线电视公司的中断通知系统
- 当 属性(或属性)发生中断时,将创建一个票证
- 有超过 2000 个属性,因此根据业务类型和地理位置将属性分为 8 个类别
- 一个用户可以订阅 8 个潜在类别
- 只有特定用户可以创建工单。
- 创建、更新或关闭工单时,如果用户订阅了 属性 所属的类别之一,他们将收到 email/sms 通知。
问题: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 中吗?