我爲我的網站創建了一個批量電子郵件系統。我遇到的問題非常糟糕,它不斷髮送電子郵件。看來這項工作陷入了無限循環。請指教。這很瘋狂,因爲在我的開發服務器上,每個帳戶只發送一封電子郵件,但在我的生產服務器上,我收到了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
請這種方法提供反饋。我想向所有用戶發送批量電子郵件,但是如果出現問題,請避免多次重試。我添加了救援塊以捕獲電子郵件異常,希望批處理將跳過錯誤並繼續處理。作爲最後的手段,如果出現其他問題,請不要再次運行。
該作業可能在某處重新啓動作業時遇到了錯誤。 – jvnill 2013-03-10 06:05:51
jvnill,我該如何防止這種情況發生,並繼續發送電子郵件?根據你的說法,我認爲這與交付失敗有關。 – Brian 2013-03-10 06:10:44
您需要在batch_emails上添加標誌,該標誌跟蹤電子郵件是否已處理,以便它不會再次發送。 – jvnill 2013-03-10 06:32:52