作业未入队| Rails +延迟作业+ ActiveJob + RSpec

时间:2018-10-17 23:48:44

标签: ruby-on-rails rspec queue delayed-job rails-activejob

在我的Rails应用程序中,我使用DelayedJob作为队列适配器,并使用ActiveJob库调用作业。

在某个时刻,我调用perform_later方法(来自ActiveJob)使任务入队。它在应用程序中运行良好,并且当我运行模型测试(我正在使用RSpec)时,所有测试都可以。

当我运行邮件规范时会出现问题。由邮递员规范运行时,同一行代码不会使作业排队。通过使用around_enqueue回调,我已经意识到问题出在哪里。

class CreateAsyncWalletEntryJob < ApplicationJob
  queue_as :default
  around_enqueue :just_debugging

  def perform wallet_entry_data
    WalletEntry.create!(wallet_entry_data)
  end

  private
    def just_debugging
      jobs_before = Delayed::Job.all.count
      yield
      jobs_after = Delayed::Job.all.count

      # when it runs through mailer specs: jobs_before == jobs_after
      # otherwise: jobs_before + 1 == jobs_after
    end
end

下面的代码是我调用enqueue方法的那一刻

CreateAsyncWalletEntryJob.perform_later(payment_data)

我已经在运行测试时将“延迟的作业”设置为排队任务,但是它对我的邮件规范没有生效。

Delayed::Worker.delay_jobs = true

我已经检查了perform方法是否正在运行,但是没有运行,这意味着问题与即时执行而不是入队无关。它没有添加到队列中,也根本没有运行perform方法!而且没有错误,它是完全沉默的。

有什么想法吗?

0 个答案:

没有答案