2016-04-26 12 views
0

私はDelayed Jobsを新しくしており、これを正しく実行しているかどうかはわかりません。データベースに遅延ジョブが見つかりません

ワーカー

class BillingFailedEmailWorker < BaseWorker 

    attr_accessor :car 

    def initialize(car) 
    @car = car 
    end 

    def billing_failed_for_subscriptions 
    StripeMailer::billing_failed_for_subscriptions(car.owner.email).deliver 
    end 

    def perform 
    self.class.new(car).delay(
     run_at: DateTime.now + 1.week, 
     queue: "Failed Subscription" 
    ).billing_failed_for_subscriptions 
    end 
end 

メーラー

class StripeMailer < ActionMailer::Base 

    default from: Settings.default_from_email 

    def billing_failed_for_subscriptions(email) 
    mail to: email, subject: 'Autobrain Subscription Renewal Failed' 
    end 
end 

billing_failed_for_subscriptionsも明らかに正しいメーラー図に相当します。

私はBillingFailedEmailWorker.new(Car.last).performを実行したときに私の質問は、私は、コマンドがDelayed::Backend::ActiveRecord::Jobに正しく実行を参照されますが、私はDelayed::Backend::ActiveRecord::Job.lastまたはDelayed::Job.lastを実行したときに私はちょうど作成したジョブが表示されません。

これは私のRails環境が開発中であるかどうか、あるいは私が紛失していることがありますか?

+0

'self.class.new(car).delay(...).billing_failed_for_subscriptions'の最後に' .save'を追加すると、データベースにレコードが保存されているようです。 –

+1

おそらく、 'Delayed :: Worker.delay_jobs = false'によって開発目的のジョブをグローバルに遅延させることを無効にしたでしょうか?その場合、ジョブは保存されずすぐに呼び出されます。 – BoraMa

+0

これはそうだった。開発時にfalseに設定されました。おかげ –

答えて

0

代わり

  • StripeMailerを使用する::

使用

  • StripeMailer .deliver billing_failed_for_subscriptions(car.owner.email):: billing_failed_for_subscriptions(car.owner.email) .deliver_later コンソールで、Delayed :: Job.lastとして確認できます
+0

私は 'NoMethodErrorを取得しています:未定義のメソッド「 はまた、あなたのgemfileにこの宝石を追加し、それをインストール.deliver_later deliver_later''エラーがStripeMailer.billing_failed_for_subscription(car.owner.email)を使用してみてください –

+0

https://github.com/collectiveidea/delayed_job インストール後に移行を実行すると正常に動作します。 –

+0

@Fakhir_ShadこれはRails 4.2(https://github.com/collectiveidea/delayed_job#rails-42)を必要としているように見えますが、今はまだ4.0になっています。私はdelayed_job宝石btwを持っています。 –

関連する問題