Rails设置(等待:2.minutes)活动作业的方法不起作用

时间:2017-03-21 08:31:53

标签: ruby-on-rails redis jobs rails-activejob resque-scheduler

使用Redis服务器上的resque_scheduler gem创建后台作业。

 class Estamps::OrderAssignment < ActiveRecord::Base

  after_save :enqueue_check_status

   def enqueue_check_status 
       AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id)
   end
 end

 class AutoRejectionJob < ActiveJob::Base
   queue_as :default

   def perform(*args) 
    order_assignment_id = args[0]
    order_assignment = Estamps::OrderAssignment.find(order_assignment_id)
    if order_assignment.status_id == 1 || order_assignment.status_id == nil
      order_assignment.status_id = 3
      order_assignment.save!
    end
  end
 end         

创建OrderAssignment记录或在2分钟后更新时,应运行AutoRejection Job。这里的概率是集合(等待:2.minutes)似乎没有运行,即

   AutoRejectionJob.perform_later(self.id)

完美无缺,但

  AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id)

什么都不做。一直未能纠正这个问题。新手到Rails所以请帮助。

1 个答案:

答案 0 :(得分:0)

我发现您的代码没有问题。 我检查过:library(ramwas) cosine_x_to_m2 = function(x,m){ x = x / sqrt(crossprod(x)); return( as.vector((m %*% x) / sqrt(rowSumsSq(m))) ); } 在ruby 2.4.0之上的rails 5.0.2中按预期工作

你的工作也是如此。 我看待它的方式,你试图设置其他地方使用的状态。 可能是错误是由于.set(wait: 2.minutes)在外部处理中被操纵(被破坏了?)

既然你说你是铁杆的新手(我想这就是“新手”的含义)我会提出一些建议。如果你已经过去了,请忽略它们......

还有一些很棒的调试工具可以帮助你找到正在发生的事情:byebug,better_errors,pry,当然还有OrderAssignment。 帮自己一个忙:尝试一下。

当我无法找到一些超出我的能力的行为时,我会使用一些“put”和一些“try / catch errors”结构(开始救援确保在ruby中)......:

rails console