私は thinking_sphinx を使用しており、モデルのデルタ インデックスを作成しています。
デルタ インデックスは機能しますが、小さなバグがあります。私が新しい商品を作るときはインデックスです。ただし、その製品を更新すると、すぐにインデックスが取得されません。古い更新された製品が索引付けされる前に、新しい製品を更新または作成する必要があります。
どこから始めればよいかよくわかりません。
私は thinking_sphinx を使用しており、モデルのデルタ インデックスを作成しています。
デルタ インデックスは機能しますが、小さなバグがあります。私が新しい商品を作るときはインデックスです。ただし、その製品を更新すると、すぐにインデックスが取得されません。古い更新された製品が索引付けされる前に、新しい製品を更新または作成する必要があります。
どこから始めればよいかよくわかりません。
私のお勧めは、単純なデルタ インデックス作成ではなく、delayed_delta インデックス作成を使用することです (これは遅くなる可能性があり、数秒でいくつかの更新が発生すると、あらゆる種類の問題が発生する可能性があります)。
次の 2 つの手順が必要です。
define_indexブロックを変更してset_property :delta => :delayed#!/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) がある場合は、それが実行されていることを確認できます。
コードの新しいバージョンをデプロイするときは必ず、そのスクリプトを再起動してください。