このアクションが起動されたときに別のアクションに基づいて電子メールを送信するために、delayed_job (3.0.1) とdelayed_job_active_record (0.4.3) を使用しています。
Delayed::Job.enqueue(MailingJob.new(@auction.id) , 0 , date)
これがメーリングジョブです
class MailingJob < Struct.new(:auction_id)
def perform
sql = "select a.id , u.fname , u.lname , u.email , p.name
from auctions a
join products p on a.product_id = p.id
join auction_followers af on a.id = af.auction_id
join users u on af.user_id = u.id
where a.id = #{auction_id}"
result = ActiveRecord::Base.connection.execute(sql)
result.each(:as => :hash) do |row|
AuctionMailer.delay.auction_start(row)
end
end
end
これがAuctionMailerです
class AuctionMailer < ActionMailer::Base
default from: "noreply@yabalashdeals.com"
def auction_start(data)
@shared = data
mail(:to => data['email'], :subject => "Yabalash Auction started")
end
end
rake jobs:work を実行すると、2 つのジョブが 4.6510 j/s で処理され、0 件のジョブが失敗しました ... しかし、メールが送信されませんでした。
エラーのないログは次のとおりです
ログ/生産.log
Sent mail to hesham.kanany@gmail.com (99ms)
Rendered text template (0.0ms)
Completed 200 OK in 288ms (Views: 1.1ms | ActiveRecord: 1.3ms)
ログ/delayed_job.log
MaillingJob completed after 0.0035
1 jobs processed at 93.1503 j/s, 0 failed ...
完了 この問題の解決策を投稿せずに申し訳ありませんが、enqueue()を使用する場合に呼び出さなければならない.deliver()を思いつきました... メールが問題なく送信されるようになりました