2016-04-26 37 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.lastDelayed::Job.last我没有看到我刚刚创建的工作。

难道这是我的Rails环境正在开发的问题还是有什么我失踪?

+0

看起来,如果我在'self.class.new(car).delay(...)。billing_failed_for_subscriptions'的末尾添加'.save',它会在数据库中保存一条记录。 –

+1

也许你通过'Delayed :: Worker.delay_jobs = false'来禁用全球的延迟工作来达到开发目的?在那种情况下,作业不会被保存,而是立即被调用。 – BoraMa

+0

这就是它。它在开发中被设置为错误。谢谢 –

回答

0

代替使用

  • StripeMailer :: billing_failed_for_subscriptions(car.owner.email)的.deliver

使用

  • StripeMailer :: billing_failed_for_subscriptions(car.owner.email) .deliver_later 然后在控制台中,您可以将其检查为Delayed :: Job.last
+0

我得到一个'NoMethodError:未定义的方法'deliver_later''错误 –

+0

尝试使用StripeMailer.billing_failed_for_subscription(car.owner.email).deliver_later 也添加此gem在你的gemfile并安装它https://github.com/collectiveidea/delayed_job 安装后运行迁移,它会正常工作。 –

+0

@Fakhir_Shad它看起来像这需要Rails 4.2(https://github.com/collectiveidea/delayed_job#rails-42),我们目前仍然在4.0。我有delayed_job gem btw。 –