0

Redisサーバー上でresque_scheduler gemを使用してバックグラウンドジョブを作成しています。アクティブジョブのRails set(wait:2minutes)メソッドが機能しません。

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分後に更新された場合、自動返却ジョブが実行されます。ここでPROBは(待ち時間:2.minutes)がセットされて実行していないようです、すなわち

AutoRejectionJob.perform_later(self.id) 

は完全に正常に動作しますが、

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

は何もしません。問題を解決できませんでした。初心者から大人まで、大変助かります。

答えて

0

あなたのコードに問題はありません。 私はチェックしました:.set(wait: 2.minutes)は、ルビーの上のレール5.0.2で期待通りに動作します。2.4.0

あなたの仕事の呼び出しはそうですか? 私はそれを見て、あなたは他の場所で使用されているステータスを設定しようとしています。 OrderAssignment外治療(破壊された?)で操作されているに おそらく、エラーが原因であるあなたは(私はそれが「初心者」は何を意味するかだと仮定)私はいくつかを作るつもりレールに慣れていたので

提案。あなたがそれを過ぎたら無視してください...

何が起こっているのかを見つけるのに役立ついくつかの偉大なデバッグツールがあります:byebug、better_errors、pry、もちろんrails console。 自分で好きなことを試してみてください。

私は自分の把握を超えた振る舞いを見つけられないときは、いくつかの "puts"といくつかの "try/catch errors"構造を使用します(レスキューはルビーで確実に始まります):

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 
関連する問題