私はこの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
を実装する必要があります方法上の任意の入力
@milligraf返信ありがとうございます。だから私は不要なので、その反復を削除し、一度 'UserNotifier'を呼び出してください。 'X-SMTPAPI'ヘッダに関しては、私はまだ少し混乱しています。だから私のコードで明示的にどこでも呼び出す必要はありませんか?あるいは、私はそれをメーラー 'user_notifier.rb'で参照する必要がありますか? – DnfD
@DnfD私は私の答えを更新しました:) – miligraf
ああ私は今参照してください!面白かった、それはそれほどまっすぐだったことに気付かなかった。本当に助けに感謝します。チケットを更新/作成/閉じると、送信ボタンの遅延が少なくなります。 Tyvm! (そして、メール受信者の配列がサーバーログの配列として正しく表示されています)。 – DnfD