4

私は thinking_sphinx を使用しており、モデルのデルタ インデックスを作成しています。

デルタ インデックスは機能しますが、小さなバグがあります。私が新しい商品を作るときはインデックスです。ただし、その製品を更新すると、すぐにインデックスが取得されません。古い更新された製品が索引付けされる前に、新しい製品を更新または作成する必要があります。

どこから始めればよいかよくわかりません。

4

1 に答える 1

3

私のお勧めは、単純なデルタ インデックス作成ではなく、delayed_delta インデックス作成を使用することです (これは遅くなる可能性があり、数秒でいくつかの更新が発生すると、あらゆる種類の問題が発生する可能性があります)。

次の 2 つの手順が必要です。

  1. define_indexブロックを変更してset_property :delta => :delayed
  2. 短いスクリプトを作成して、遅延インデックス作成ジョブが確実に実行されるようにします。これが私が使用するものです:
#!/usr/bin/env ルビ
## このスクリプトは、delayed_jobs が確実に実行されるようにするためのものです
## スフィンクスを考えて使う
File.dirname(__FILE__) + '/../config/environment' が必要です

# これの定義を config/environments/*.rb に置くこともできるので、テスト用、本番用、および開発用で異なります
JobRunnerPidFile = "#{RAILS_ROOT}/tmp/pids/job_runner.pid"

if File.exists?(JobRunnerPidFile)
  old_pid = File.read(JobRunnerPidFile).to_i
  始める
    Process.getpgid(old_pid) > 0 の場合
      # まだ実行中です。黙って終了しましょう...
      終了(0)
    終わり
  救援
    # 何も動いていないように見えるので、続けましょう
  終わり
終わり

File.open(JobRunnerPidFile, "w") {|f| f.write "#{$$}\n" }

遅延::Worker.new.start

5 分ごとに cron からそのスクリプトを実行できます (1 つのインスタンスのみを実行します)。または、監視サービス (例: monit) がある場合は、それが実行されていることを確認できます。

コードの新しいバージョンをデプロイするときは必ず、そのスクリプトを再起動してください。

于 2010-01-06T15:23:09.037 に答える