2010-01-06 2 views
4

Я использую think_sphinx и дельта-индексацию модели.Rails, Thinking_sphinx, Delta Index

Дельта-индекс работает, но есть небольшая ошибка. Когда я создаю новый продукт, это индекс. Однако, когда я обновляю этот продукт, он сразу не получает индекс. Я должен обновить или создать новый продукт до того, как будет обновлен старый обновленный продукт.

Не совсем уверен, с чего начать.

+0

У меня иногда возникают подобные проблемы. Мне было сложно определить, что происходит ... – Matchu

ответ

3

Моей рекомендацией было бы использовать индексирование delayed_delta вместо прямого дельта-индексации (что может быть медленным, и если у вас есть несколько обновлений за несколько секунд, это может вызвать у вас всевозможные проблемы).

Он принимает два этапа:

  1. Поменяйте свой define_index блок, чтобы иметь set_property :delta => :delayed
  2. Создать короткий сценарий, чтобы убедиться, что просроченная задания индексации получить пробег. Вот один я использую:
 
#!/usr/bin/env ruby 
## this script is for making sure and delayed_jobs get run 
## it is used by thinking sphinx 
require File.dirname(__FILE__) + '/../config/environment' 

# you can also put the definition of this in config/environments/*.rb so it's different for test, production and development 
JobRunnerPidFile = "#{RAILS_ROOT}/tmp/pids/job_runner.pid" 

if File.exists?(JobRunnerPidFile) 
    old_pid = File.read(JobRunnerPidFile).to_i 
    begin 
    if Process.getpgid(old_pid) > 0 
     # still running, let's exit silently... 
     exit(0) 
    end 
    rescue 
    # looks like nothing is running, so let's carry on 
    end 
end 

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

Delayed::Worker.new.start 

Вы можете запустить этот скрипт хрон каждые 5 минут (это будет только один экземпляр), или если у вас есть служба мониторинга (например, monit) вы можете иметь его убедитесь, что он работает.

Обязательно перезапустите этот сценарий, когда вы развертываете новую версию своего кода.

+0

Спасибо. Это может быть решением моей проблемы. – s84