1

TS 遅延デルタ ジョブが終了したかどうかを確認する方法はありますか? コールバックで新しい検索を実行する必要があるシナリオがありafter_saveます。もちろん、デルタ インデックスへの変更が検索結果に反映されることを確認したいと考えています。

私の例の詳細は次のとおりです。

多くの注釈を持つフィーチャーと呼ばれるモデルがあります(注釈モデル)。インデックスは次のようになります。

define_index do
  indexes annotations.value, :as => :annotations

  # other indexes
  set_property :delta => :delayed
end

注釈の「値」が変更deltaされると、注釈モデルのコールバックで関連する機能の属性を更新します。delta 属性を true に設定すると、delayed_job タスクがスピンオフしてデルタ インデックスが更新されます。別のコールバックで、更新されたデルタ インデックスに対して新しい検索を実行したいのですが、検索がインデックスの現在の状態をまったく反映していないことに気付きました。デルタ ジョブがまだ終了していないため、これは間違いありません。

これらのタイミングの問題に対処するための最良の戦略は何ですか?

4

1 に答える 1

0

一つだけ思いつきます。delayed_jobs テーブルを照会する

ActiveRecord::Base.connection.execute("select count(1) from delayed_jobs where handler like '%%'")

ジョブが成功した場合、エントリは確実に削除されています。これが私が考えることができる唯一の方法です。または、大したことでない場合は、このモデルだけの遅延デルタを無効にします。

于 2012-11-01T19:44:19.760 に答える