Rails, Thinking_sphinx, Дельта-индекс

Я использую think_sphinx и дельта-индексирую модель.

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

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


person thenengah    schedule 06.01.2010    source источник
comment
У меня иногда возникают подобные проблемы. Мне было трудно понять, что происходит...   -  person Matchu    schedule 06.01.2010


Ответы (1)


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

Это занимает два шага:

  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

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

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

person Community    schedule 06.01.2010
comment
Спасибо. Это может быть решением моей проблемы. - person thenengah; 07.01.2010