Le link Florian fourni a le code par Amit Solanki ça marche!
Voici ce que je fait pour que cela fonctionne avec Capistrano:
gemmes Installer
Créer un fichier appelé script/delayed_delta
avec le contenu:
#!/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
Configurer Capistrano
Capistrano doit commencer Sphinx et job_runner (avec notre script/delayed_delta
).
Ajouter quelque chose comme ceci à la 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
Configurer whenever
petit bijou
Dans vos config/schedule.rb
ajouter des lignes pour mettre à jour l'index Sphinx et commencer à job_runner si elle est pas déjà en cours d'exécution
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
Cela est converti en un crontab qui est exécuté toutes les 30 minutes pour mettre à jour Sphinx
Notes finales et leçons apprises
Le script/delayed_delta
utilise le daemon_generator joyau pour démarrer le job_runner script de travailleur de fond. Cela équivaut à exécuter rake thinking_sphinx:delayed_deltas
sur la console, mais persistant.
Assurez-vous que seul job_runner ou processus rake thinking_sphinx:delayed_deltas
est en cours à un moment
Laissez Capistrano commencer les deux Sphinx (râteau ts: reconstruction) et script/delayed_delta
. J'ai eu un problème lorsque j'ai commencé sphinx et delayed_deltas de différents utilisateurs ou différents environnements