注文書がベンダーに割り当てられ、ベンダーが次の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が更新され、コードが完全に実行されますが、指定したスケジュールされた時間のために動作しません。どこが間違っていますか?私はほぼ一週間苦労してきました。どうすればこれを達成できますか?初心者がレールに乗るので、助けてください。
私を許して、私はresque_schedulerを使用していたときに、なぜ私はsidekiqログをチェックします –