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