私は 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
) がある場合は、それが実行されていることを確認できます。
コードの新しいバージョンをデプロイするときは必ず、そのスクリプトを再起動してください。