link Флориан предоставленном код Амит Соланка это работает!
Вот что я сделал, чтобы получить эту работу с Capistrano:
Установите камни
Создайте файл с именем script/delayed_delta
с содержимым:
#!/usr/bin/env ruby
require 'rubygems'
require 'daemons'
dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
daemon_options = {
:multiple => false,
:dir_mode => :normal,
:dir => File.join(dir, 'tmp', 'pids'),
:backtrace => true
}
puts 'delayed_delta'
Daemons.run_proc('job_runner', daemon_options) do
if ARGV.include?('--')
ARGV.slice! 0..ARGV.index('--')
else
ARGV.clear
end
Dir.chdir dir
RAILS_ENV = ARGV.first || ENV['RAILS_ENV'] || 'development'
require File.join('config', 'environment')
Delayed::Worker.new(
:min_priority => ENV['MIN_PRIORITY'],
:max_priority => ENV['MAX_PRIORITY']
).start
end
Настройка Capistrano
Capistrano должен начать Сфинкса и job_runner (с нашей script/delayed_delta
).
Добавить что-то вроде этого в deploy.rb
:
deploy.task :restart, :roles => :app do
run "export RAILS_ENV=production && cd #{deploy_to}/current && /usr/bin/rake ts:rebuild"
run "export RAILS_ENV=production && cd #{current_path} && /usr/bin/ruby script/delayed_delta start"
end
Настройка whenever
камень
В ваших config/schedule.rb
добавить строки для обновления индекса Сфинкса и начать job_runner, если он еще не запущен
every 30.minutes do
command "export RAILS_ENV=production && cd /path/to/rails/production && /usr/bin/rake ts:index && /usr/bin/ruby script/delayed_delta start"
end
Это конвертируется в кронтаб, который выполняется каждые 30 минут, чтобы обновить сфинкса
Заключительные Замечания и извлеченные уроки
script/delayed_delta
использует это daemon_generator драгоценный камень, чтобы начать job_runner фоновый рабочий сценарий. Это эквивалентно запуску rake thinking_sphinx:delayed_deltas
на консоли, но постоянному.
Убедитесь, что только один job_runner или rake thinking_sphinx:delayed_deltas
процесс выполняется в одно время
Пусть Capistrano начать как Sphinx (рейк ц: восстановление) и script/delayed_delta
. У меня возникла проблема, когда я начал использовать sphinx и delayed_deltas у разных пользователей или в разных средах.