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