1

ニュースレターを送信するために、delayed_job のコード例を使用しています。

class NewsletterJob < Struct.new(:subscribers)
  def perform
    subscribers.each { |subscriber| NewsletterMailer.newsletter(subscriber.id) }
  end
end

次に、ここでジョブを設定します。

Delayed::Job.enqueue NewsletterJob.new(Subscriber.find(:all))

遅延ジョブを使用しないと、メールが送信されるので機能します。遅延ジョブを直接使用すると、メールは次のように送信されます。

NewsletterMailer.delay.newsletter(subscriber)

データベースのジョブ テーブルでは、yaml は次のとおりです。

--- !ruby/struct:NewsletterJob
subscribers:
- !ruby/ActiveRecord:Subscriber
  attributes:
    id: '54'
    email: someemail@gmail.com
    created_at: '2013-08-09 04:44:51.113258'
    updated_at: '2013-08-09 08:26:05.934564'
    token: quVI0dhxyyentB7TJ1IO6w
- !ruby/ActiveRecord:Subscriber
  attributes:
    id: '56'
    email: another@gmail.com
    created_at: '2013-08-11 09:29:22.000829'
    updated_at: '2013-08-11 09:29:22.000829'
    token: a-n-yijwi38_HvGFSmetmA

MockSMTP を使用して、ローカル マシンでメールを取得します。

仕事は順調に進んでいるように見えても、なぜかメールが送られてきません。

yamlに何か問題がありますか?

私はNOOBです

4

2 に答える 2

2

メーラー メソッドの前にチェーンする場合、それdelayedを呼び出す必要はありませんdeliver。Delayed::Job がそれを処理します。

NewsletterMailer.delay.newsletter(subscriber) # No need to call `deliver` here

deliverただし、独自のカスタム ジョブ構造体から呼び出す場合は、メーラーのメソッドを呼び出すことを忘れないでください。

subscribers.each do |subscriber|
  NewsletterMailer.newsletter(subscriber.id).deliver # You need `deliver` here
end
于 2013-08-11T17:36:14.913 に答える