在我的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方法!而且没有错误,它是完全沉默的。
有什么想法吗?