0

我有一個rails應用程序,其中一個訂單被分配給供應商,供應商必須在接下來的15分鐘內接受訂單(爲了測試目的,我保留它兩分鐘)。一旦訂單分配給供應商,訂單分配表中的status_id屬性更新爲'1'。現在供應商必須接受或拒絕根據status_id分別更新爲2和3的訂單。如果供應商在分配時間後的15分鐘內不接受/拒絕訂單,則會在訂單分配表中將status_id自動更新爲3。下面是摘錄Resque scheduler Redis服務器上的活動作業入隊但未運行

訂貨型號:

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來自包含各種狀態的另一個表。

我使用resque調度寶石

我Redis的服務器正在運行。

在開發服務器日誌中,自動拒絕作業顯示爲排隊並計劃在創建訂單分配記錄兩分鐘後重新調用。

這是服務器日誌顯示:

[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 aux運行| grep的resque這就是我得到

 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 

但是,當我在兩分鐘後檢查(轉換的UTC到IST)的順序分配記錄的STATUS_ID不updated.My應用程序的時區是「孟買」(如果這是任何重要性)。

如果我只是刪除代碼中所設置的等待一部分,如果我運行STATUS_ID是IE更新此

def enqueue_check_status 
    AutoRejectionJob.perform_later(self.id) 
    end 

代碼工作,但隨着集(等待:2.minutes)的工作是隻是入隊,但沒有運行。

我在日誌中的resque_stdout沒有顯示任何與自動拒絕作業相關的數據,但顯示了其他電子郵件工作者或短信作業所需的輸出。

我試圖通過在控制檯

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

運行它手動測試工作則STATUS_ID被更新,代碼運行完美,但對於指定計劃的時間不工作。我哪裏錯了?我一直在掙扎近一週。我怎樣才能做到這一點?新手入門,所以請幫助。

回答

0

您可以使用以下命令監視sidekiq.log文件,以查看錯誤。但在這種情況下,您必須使用perform_now方法。

尾-f登錄/ sidekiq.log

+0

原諒我,但爲什麼我會檢查sidekiq日誌,當我使用resque_scheduler –

相關問題