2

私のProduct#create方法では、次のようなものがあります

ProductNotificationMailer.notify_product(n.email).deliver

製品が保存されると発生します。上記が実行される前に、確認ページの読み込み時間を遅らせる一連のロジックと計算が発生しています。次のページが最初に読み込まれ、メール配信が後でまたはバックグラウンドで行われるようにする方法はありますか?

ありがとう

4

2 に答える 2

2

はい、バックグラウンド ワーカーを調べる必要があります。SidekiqDelayedJobResqueは人気のあるものです。

これは 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 プロセスが解放されてすぐに応答のレンダリングに戻ることができます。

于 2013-05-20T17:12:23.957 に答える
1

遅延ジョブはこれを行います:

githubのページはこちら。

そして、ここにそれを設定するレールキャストがあります。

于 2013-05-20T17:14:52.127 に答える