我有一個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被更新,代碼運行完美,但對於指定計劃的時間不工作。我哪裏錯了?我一直在掙扎近一週。我怎樣才能做到這一點?新手入門,所以請幫助。
原諒我,但爲什麼我會檢查sidekiq日誌,當我使用resque_scheduler –