Моей рекомендацией было бы использовать индексирование delayed_delta вместо прямого дельта-индексации (что может быть медленным, и если у вас есть несколько обновлений за несколько секунд, это может вызвать у вас всевозможные проблемы).
Он принимает два этапа:
- Поменяйте свой
define_index
блок, чтобы иметь set_property :delta => :delayed
- Создать короткий сценарий, чтобы убедиться, что просроченная задания индексации получить пробег. Вот один я использую:
#!/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
) вы можете иметь его убедитесь, что он работает.
Обязательно перезапустите этот сценарий, когда вы развертываете новую версию своего кода.
У меня иногда возникают подобные проблемы. Мне было сложно определить, что происходит ... – Matchu