0

Web サイト用のバッチ メール システムを作成しました。私が抱えているひどい問題は、メールが絶えず送信されることです。仕事が無限ループに陥っているようです。お知らせ下さい。私の開発サーバーではアカウントごとに 1 つの電子メールしか送信されないのに、実稼働サーバーでは 5 つの電子メールを受信したため、おかしくなりました。したがって、私のサイトのすべてのユーザーが複数の電子メールを受信したことを意味します。

コントローラ:

 class BatchEmailsController < ApplicationController

 before_filter :authenticate_admin_user!

 def deliver
 flash[:notice] = "Email Being Delivered"
 Delayed::Job.enqueue(BatchEmailJob.new(params[:batch_email_id]), 3, 10.seconds.from_now, :queue => 'batch-email', :attempts => 0)
 redirect_to admin_batch_emails_path
end
end

lib フォルダー内のジョブ:

 class BatchEmailJob < Struct.new(:batch_email_id)
 def perform
 be = BatchEmail.find(batch_email_id)
 if be.to.eql?("Contractors")
   cs = Contractor.all
   cs.each do|c|
     begin
        BatchEmailMailer.batch_email(be.subject, be.message, be.link_name, be.link_path, be.to, c.id).deliver
     rescue Exception => e
          Rails.logger.warn "Batch Email Error: #{e.message}"
     end
 else
   ps = Painter.all
   ps.each do |p|
     begin
       BatchEmailMailer.batch_email(be.subject, be.message, be.link_name, be.link_path, be.to, p.id).deliver
     rescue Exception => e
       Rails.logger.warn "Batch Email Error: #{e.message}"
     end
   end
 end
 end
 end

遅延ジョブ初期化子:

 Delayed::Worker.max_attempts = 0

このアプローチに関するフィードバックをお寄せください。すべてのユーザーにバッチ メールを送信したいのですが、問題が発生した場合に何度も再試行することは避けてください。バッチがエラーをスキップして処理を続行することを期待して、メールの例外をキャッチするためのレスキュー ブロックを追加しました。何か問題が発生した場合は、最後の手段として再度実行しないでください。

4

1 に答える 1