【问题标题】:Rails set(wait: 2.minutes) method for active job does not works活动作业的 Rails set(wait: 2.minutes) 方法不起作用
【发布时间】:2017-08-12 19:23:32
【问题描述】:

在 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。这里的问题是 set(wait: 2.minutes) 似乎没有运行,即

   AutoRejectionJob.perform_later(self.id)

工作得很好,但是

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

什么都不做。一直没能纠正问题。 Rails 新手,请帮忙。

【问题讨论】:

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


    【解决方案1】:

    我认为您的代码没有问题。 我检查了:.set(wait: 2.minutes) 在 ruby​​ 2.4.0 之上的 rails 5.0.2 中按预期工作

    您对这份工作的要求也是如此。 在我看来,您正在尝试设置在其他地方使用的状态。 可能,错误是由于OrderAssignment 在外部处理中被操纵(被破坏?)

    既然你说你是 Rails 新手(我想这就是“新手”的意思),我将提出一些建议。如果您已经过去了,请忽略它们...

    还有一些很棒的调试工具可以帮助您找到正在发生的事情:byebug、better_errors、pry,当然还有rails console。 帮自己一个忙:试试看。

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

    def perform(*args) 
      puts "@@@@@@@ JOB TRIGGERED @@@@@@"
      begin
        order_assignment_id = args[0]
        order_assignment = Estamps::OrderAssignment.find(order_assignment_id)
        puts "#{order_assignment.inspect}"
        if order_assignment.status_id == 1 || order_assignment.status_id == nil
          order_assignment.status_id = 3
          order_assignment.save!
        end
        puts "@@@@@@@ JOB DONE @@@@@@"
      rescue StandardError => e
        # ... display e.message ...
      ensure
        #... 
      end
    end
    

    【讨论】:

      【解决方案2】:
      1. 检查您的 Rails 版本。
      2. 检查您的 Rails 日志(日志文件夹,所有作业在执行时都会将消息写入日志文件)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多