0

注文書がベンダーに割り当てられ、ベンダーが次の15分以内に注文を受け入れる必要があるレールアプリがあります。注文がベンダーに割り当てられると、注文割り当てテーブルのstatus_id属性が '1'に更新されます。ここで、ベンダは、status_idがそれぞれ2および3に更新されることに基づいて注文を受け入れるか拒否する必要があります。仕入先が割当時点から15分以内に受注を承認または却下しない場合、ステータス割当テーブルでstatus_idが自動的に3に更新されます。ここでは、スニペットレディススケジューラのアクティブジョブキューに登録されているが実行されていない

発注モデルです:

has_many :order_assignments 
    belongs_to :vendor 

ベンダーモデル:

has_many :order_assignments 
    has_many :orders 

OrderAssignmentモデル:

class Estamps::OrderAssignment < ActiveRecord::Base 

    after_save :enqueue_check_status 
    belongs_to :vendor, class_name: 'Estamps::Vendor' 
    belongs_to :order, class_name: 'Estamps::Order' 
    belongs_to :status, class_name: 'Estamps::OrderAssignments::Status' 


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

    end 

Auto_rejection_job

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.update(status_id: 3) 
     order_assignment.save! 
    end 
    end 
    end   

OrderAssignmentスキーマ:

create_table "estamps_order_assignments", force: :cascade do |t| 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.integer "vendor_id" 
    t.integer "order_id" 
    t.integer "status_id" 
    end 

ここSTATUS_IDは各種ステータスが含まれている別のテーブルから来ています。

私は私のRedisのサーバーが稼働しているresque・スケジューラの宝石に

を使用しています。

開発サーバーログでは、自動拒否ジョブがエンキューされ、注文割り当てレコードの作成から2分後にリザルトされるようスケジュールされています。

これは、サーバのログが表示するものである:

[ActiveJob] Enqueued AutoRejectionJob (Job ID: 7faa9e74-5151-4b9f-9f13-  
0d90c9a68825) to Resque(auto_rejection_job) at 2017-03-07 11:55:44 UTC with 
arguments: 77 

私はPSの補助で実行|それがどんなであれば(ISTにUTCに変換)ための割り当てレコードのSTATUS_IDはupdated.Myアプリのタイムゾーンは「ムンバイ」ではない(これresque grepが、私は

 maheshmesta  7667 0.0 0.0 2423392 536 s004 R+ 5:27PM 
     0:00.00 grep resque 
     maheshmesta  7474 0.0 1.7 2615936 145100 s002 S  5:21PM 
     0:06.53 resque-1.26.0: 
     Waiting forauto_rejection_job,default,estamp_orde RBENV_VERSION=2.2.2 
     maheshmesta  7473 0.0 1.7 2613884 144508 s002 S  5:21PM 
     0:06.52 resque-1.26.0: Waiting for 
     auto_rejection_job,default,estamp_orde RBENV_VERSION=2.2.2 

得るものです。しかし、私は2分後に確認したときに重要度)。

私は単にセットを削除した場合、私はこれを実行する場合、コードに一部を待って、STATUS_IDがすなわち更新され

def enqueue_check_status 
    AutoRejectionJob.perform_later(self.id) 
    end 

コードは動作しますが、セットで(待ち時間:2.minutes)ジョブがあります単にエンキューされますが、実行されません。

ログ内のresque_stdoutには自動拒否ジョブに関するデータは表示されませんが、他の電子メールまたはSMSジョブに必要な出力が表示されます。

私はコンソール

AutoRejectionJob.set(wait: 2.minutes).**perform_now**(an id) 

上でそれを実行することにより、ジョブを手動でテストしてみました、その後STATUS_IDが更新され、コードが完全に実行されますが、指定したスケジュールされた時間のために動作しません。どこが間違っていますか?私はほぼ一週間苦労してきました。どうすればこれを達成できますか?初心者がレールに乗るので、助けてください。

答えて

0

エラーを表示するには、次のコマンドを使用してsidekiq.logファイルを使用して監視することができます。ただし、この場合はperform_nowメソッドを使用する必要があります。

は、tail -fログ/ sidekiq.log

+0

私を許して、私はresque_schedulerを使用していたときに、なぜ私はsidekiqログをチェックします –

関連する問題