Rails, Thinking_sphinx, Delta Index - PullRequest
       5

Rails, Thinking_sphinx, Delta Index

4 голосов
/ 06 января 2010

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

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

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

1 Ответ

3 голосов
/ 06 января 2010

Я бы порекомендовал использовать индексацию 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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...