0

このアクションが起動されたときに別のアクションに基づいて電子メールを送信するために、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()を思いつきました... メールが問題なく送信されるようになりました

4

1 に答える 1

0

遅延ジョブコードが間違っているようです。コンソールから呼び出すことができるメソッドにそれを移動してみてください。

具体的には、:as => :hash を削除したい場合があります。

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 do |row|
   AuctionMailer.delay.auction_start(row)
 end

終わり

于 2013-03-11T16:17:42.727 に答える