2016-04-01 3 views
0

私はこのpostに出くわしました。私は、優先される遅延ジョブの宝石の使用を避けることができたようです。アプリケーションのRails 4アプリケーション内のSendgrid APIとユーザサブスクリプションロジック

根拠:

  • ケーブル会社
  • のための停電通知システム障害は、プロパティ(またはプロパティ)で行われ、チケットは
  • 2000以上のプロパティがありますが作成されますしたがって、プロパティはビジネスタイプと地理的位置に基づいて8つのカテゴリに分割されます
  • ユーザーは8つの潜在的なカテゴリにサブスクライブできます
  • 特定のユーザーのみがチケットを作成できますs。
  • チケットが作成、更新、または閉じているとき、彼らはプロパティがであるカテゴリのいずれかに加入している場合、ユーザーは電子メール/ SMS通知を受け取りますが

問題:電子メールは、チケットが作成/更新されたときに送信されますが、最終的に300以上の購読ユーザーがメールを受信します。私は現在、約15人のテストユーザーがいて、チケットが変更されると、毎回15の別々のリクエストが送信されているように見えます。これはブラウザでかなり遅いです(つまり、チケット変更子は作成/更新/終了ボタンはクリックされますが、耐えがたいです)。ますます多くのユーザーが加入するにつれ、この遅さは許容できません。

Hereはチェックアウトしたいと思うならば完全にチケットコントローラです:私はそれがかなり反復的で、DRYの原則に従わず、確かにリファクタリングできることを認識しています。

Iがカテゴリロジックコントローラであるが、app/mailers/user_notifier.rb「は電子メールの方法が定義される場合である、とISNので

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

を(SO上記ポスト連結から)を実装する方法について混乱していますそれでheaders["X-SMTPAPI"] = { :to => array_of_recipients }.to_jsonは行くはずですか?

ライン219のtickets_controller.rbは以下のとおりです。

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

すでにX-SMTPAPIヘッダー内:toキーを設定しているので、あなたは@emails_for_emailを反復し、それぞれにUserNotifierを呼び出す必要はありません。

だけUserNotifierにarray_of_recipientsを渡し、ヘッダとして設定:

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

そしてSenGridは、X-SMTPAPIヘッダを読み:toキーを読み、すべての受信者にメッセージを配信します。


私はsendgrid-ruby宝石を使用することをお勧めしますと、おそらくSendGridにテンプレートを保存することができますか?

+0

@milligraf返信ありがとうございます。だから私は不要なので、その反復を削除し、一度 'UserNotifier'を呼び出してください。 'X-SMTPAPI'ヘッダに関しては、私はまだ少し混乱しています。だから私のコードで明示的にどこでも呼び出す必要はありませんか?あるいは、私はそれをメーラー 'user_notifier.rb'で参照する必要がありますか? – DnfD

+0

@DnfD私は私の答えを更新しました:) – miligraf

+0

ああ私は今参照してください!面白かった、それはそれほどまっすぐだったことに気付かなかった。本当に助けに感謝します。チケットを更新/作成/閉じると、送信ボタンの遅延が少なくなります。 Tyvm! (そして、メール受信者の配列がサーバーログの配列として正しく表示されています)。 – DnfD

関連する問題