0

私のアプリでは、多くのメール(〜100)をトリガーする特定のイベントがあります。明らかに、すぐに送信することはできません。そのため、DelayedJobを使用してキューに入れ、リクエストの処理後に送信しています。メールを送信する100人を決定するロジックは、実行に時間がかかるほど重いことがわかったので、そのプロセスもDelayedJobにしたいと思います。このロジックはどこに行くべきですか?(モデル?メーラー?)モデルからメールを送信するのは気分が悪いだけです。ここにベストプラクティスはありますか?

4

1 に答える 1

2

ジョブを表すクラスを作成する必要があります。モデルクラスではなく、コントローラークラスではありません。ジョブクラスです。

# app/jobs/mail_job.rb
class MailJob
  attr_accessor :first_option, :second_option

  def initialize(first_option, second_option)
    self.first_option = first_option
    self.second_option = second_option
  end

  def perform
    accounts = Account.where("some_key" => first_option).to_a
    # more complicated stuff goes here
    accounts.each do |account|
      AccountMailer.hello_message(account).deliver
      account.mark_hello_delivered!
    end
  end
end

job = MailJob.new(params["first"], params["second"])
Delayed::Job.enqueue(job)
于 2012-06-16T05:02:10.733 に答える