我需要执行一项工作,其中每次创建订单时都会将其分配给供应商,如果供应商不接受订单并在指定时间内更新状态,订单将自动拒绝,状态更新为拒绝。我面临的问题是,该作业进入延迟队列,如 resque Web 视图中所示,但在指定的延迟时间后没有移动到主队列延迟失效
这是我的工作。
class AutoRejectionJob < ActiveJob::Base
queue_as :auto_rejection_queue
def perform(*args)
assignment_id = args[0]
order_assignment = Estamps::Assignment.find(assignment_id)
if order_assignment.status_id == 1 || order_assignment.status_id == nil
order_assignment.status_id = 3
order_assignment.save!
end
end
end
在我的分配模型中:
class Estamps::Assignment < ActiveRecord::Base
after_create :enqueue_check_status
def enqueue_check_status #
AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id)
end
end
在这里,一旦创建了分配记录,状态通常在创建时保持为“已分配”。现在从创建之日起,如果用户在指定时间内没有更新状态,则作业必须自动将状态更新为“已拒绝”。
我也试过这个方法。
def enqueue_check_status
Resque.enqueue_at_with_queue('auto_rejection_queue', 2.minutes.from_now,
AutoRejectionJob, assignment_id: self.id)
end
他们都将作业发送到 resque 延迟队列,但不将作业或将作业带到主队列执行。
此外,当我单击延迟作业的所有计划链接时,作业的时间戳显示没有列出要安排的作业
我被这个问题困扰了将近两个星期。请帮忙!如果需要更多信息,请告诉我。与这个有一段艰难的时光。