私のProduct#create
方法では、次のようなものがあります
ProductNotificationMailer.notify_product(n.email).deliver
製品が保存されると発生します。上記が実行される前に、確認ページの読み込み時間を遅らせる一連のロジックと計算が発生しています。次のページが最初に読み込まれ、メール配信が後でまたはバックグラウンドで行われるようにする方法はありますか?
ありがとう
私のProduct#create
方法では、次のようなものがあります
ProductNotificationMailer.notify_product(n.email).deliver
製品が保存されると発生します。上記が実行される前に、確認ページの読み込み時間を遅らせる一連のロジックと計算が発生しています。次のページが最初に読み込まれ、メール配信が後でまたはバックグラウンドで行われるようにする方法はありますか?
ありがとう
はい、バックグラウンド ワーカーを調べる必要があります。Sidekiq、DelayedJob、Resqueは人気のあるものです。
これは Sidekiq を示す優れたRailsCastです。
class NotificationWorker
include Sidekiq::Worker
def perform(n_id)
n = N.find(n_id)
ProductNotificationMailer.notify_product(n.email).deliver
end
end
n
あなたの例に何があったのかわからないので、それで行きました。作業を行ったところで、次のように置き換えることができます。
NotificationWorker.perform_async(n.id)
完全なオブジェクトを引数として渡さない理由n
は、引数がシリアル化され、整数 ID だけをシリアル化する方が簡単/高速だからです。
ジョブが保存されると、バックグラウンドで 2 番目のプロセスが実行され、そのプロセスが作業を実行し、Web プロセスが解放されてすぐに応答のレンダリングに戻ることができます。