주문에 공급 업체가 지정되어 있고 공급 업체가 다음 15 분 내에 주문을 수락해야하는 레일 응용 프로그램이 있습니다. 주문이 공급 업체에 할당되면 주문 할당 테이블의 status_id 속성이 '1'로 업데이트됩니다. 이제 공급 업체는 status_id가 각각 2와 3으로 업데이트되는 순서를 수락하거나 거부해야합니다. 공급 업체가 할당 시간으로부터 다음 15 분 이내에 주문을 수락/거절하지 않으면 주문 할당 테이블에서 status_id가 자동으로 3으로 업데이트됩니다.Resque 스케줄러 대기열에 있지만 실행중인 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 - 스케줄러 보석을
내 레디 스 서버를 사용하고
가 실행 중입니다.
개발 서버 로그에서 자동 거부 작업은 대기열에 포함 된 것으로 표시되며 주문 할당 레코드를 만든 후 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
내가 추신 보조 실행 | 이 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이 updated.My 응용 프로그램의 시간대 아니다 "뭄바이"입니다 (IST에 UTC 변환) 무엇인가 중요성). 내가 실행하는 경우
단순히 코드에서 설정 한 대기 부분을 제거하면
는 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를 업데이트하고 코드가 완벽하게 실행되지만 지정된 일정 시간 동안 작동하지 않습니다. 내가 어디로 잘못 가고 있니? 나는 거의 일주일 동안 고심하고있다. 이것을 어떻게 할 수 있습니까? 레일에 신참, 그래서 제발 도와주세요.
나를 용서 로그 -f,하지만 난 sidekiq 로그를 확인 왜 나는 resque_scheduler를 사용하고 때 –