8
votes

Des idées Pourquoi penser aux tâches de Rake Sphinx ne fonctionne pas?

Je trouve que la pensée Sphinx est parfois erronée lorsque j'essaie d'exécuter ses tâches de râteau. Parfois, les tâches fonctionnent bien, et parfois, je reçois des erreurs comme celle ci-dessous.

Je gère les tâches en tant qu'utilisateur normal et non root. Ne pas utiliser sudo. P>

Dans l'exemple ci-dessous, SeechD est toujours en cours d'exécution après que la tâche du râteau échoue. P>

J'ai aussi vu des erreurs similaires avec TS: reconstruire code >. P>

Quelqu'un d'autre a-t-il vu cela? P>

J'utilise Sphinx 0.9.9-Libération (R2117) P>

J'utilise la pensée Sphinx 1.4. 4 Au lieu de la dernière version parce que je suis sur Rails 2.3.11. P>


$ rake ts:stop RAILS_ENV=production
(in /var/www/blog_app/releases/20110425053509)
rake aborted!
execution expired

(See full trace by running task with --trace)
[ethan@apphost current]$ rake ts:stop RAILS_ENV=production --trace
(in /var/www/blog_app/releases/20110425053509)
** Invoke ts:stop (first_time)
** Invoke thinking_sphinx:stop (first_time)
** Invoke thinking_sphinx:app_env (first_time)
** Execute thinking_sphinx:app_env
** Invoke environment (first_time)
** Execute environment
** Execute thinking_sphinx:stop
rake aborted!
execution expired
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/1.8/timeout.rb:60
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/thinking-sphinx-1.4.4/lib/thinking_sphinx/tasks.rb:58
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `call'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:636:in `execute'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `each'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:631:in `execute'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:597:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:607:in `invoke_prerequisites'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:604:in `each'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:604:in `invoke_prerequisites'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:596:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/1.8/monitor.rb:242:in `synchronize'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:590:in `invoke_with_call_chain'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:583:in `invoke'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2051:in `invoke_task'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `each'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2029:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2023:in `top_level'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2001:in `run'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:2068:in `standard_exception_handling'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/lib/rake.rb:1998:in `run'
/opt/ruby-enterprise-1.8.7-2010.01/lib/ruby/gems/1.8/gems/rake-0.8.7/bin/rake:31
/opt/ruby/bin/rake:19:in `load'
/opt/ruby/bin/rake:19


1 commentaires

Avez-vous exécuté Rake TS: Stop à partir d'un script de capistrano Déployer?


5 Réponses :


12
votes

Je pense que cette erreur est causée lorsque vous avez déjà un démon de recherche.

ESSAYE P>

sudo kill -9 process_id


6 commentaires

Je voudrais ajouter, le «9» ne devrait être inclus que après une tentative sans qu'elle n'a pas réussi. C'est juste une bonne domination en général.


Ce n'est pas une solution. Le but de rake TS: stop est pour arrêter SearchD . En disant que "tu devrais tuer manuellement sur Searchd avant d'exécuter TS: STOP" n'a pas de sens.


Alex, Rake TS: STOP a déjà été essayé dans cet exemple, le problème ici peut être causé lorsque deux démons sont en cours d'exécution et que l'arrêt ne sait pas lequel s'arrête.


Ok, bon point. Mais dans l'exemple que vous montrez, il n'y a qu'un seul SearchD Daemon en cours d'exécution. J'ai le même problème que Ethan, mais dans mon cas, il n'y a aussi qu'un seul SearchD Daemon exécutant et TS: Stop ne peut pas l'arrêter. Bien sûr, je pourrais continuer à le tuer manuellement plutôt que d'utiliser TS: arrêter , mais cela ne résolvait pas le problème réel.


Je fais habituellement dans les deux étapes suivantes: sudo killall -9 la recherche # va tuer Sphinx Rails_env = Production Rake Ts: Reconstruire


Je n'entraîne généralement que mes neuf quand les méchants sont autour.



6
votes

J'ai essayé commandement 'PS | Grep SearchD 'pour obtenir un identifiant de processus, mais je ne l'ai pas eu. Ensuite, j'ai essayé de commander 'pgrep Searchd', cela me donne un identifiant de processus. J'ai tué ce processus et le commandement de Ran 'Rake Ts: Reconstruisant'. Ça a marché.

J'ai blogué sur toute l'expérience ici (Disclaimer: i 'm l'auteur).


0 commentaires

3
votes

en pensant_sphinx 1.4.4 Il y a un 5 secondes d'attente sur Rake TS: STOP

Si Rake TS: Stop prend près ou plus de 5 secondes, Ruby organisera une exception.

J'utilise la pensée_sphinx 1.3.18 dans l'intervalle. (Il n'y a pas de délai d'attente sur 1.3.18).

Aussi j'ai soumis un patch à Le référentiel GitHub et le délai d'attente seront configurables avec un sphinx.yml variable de configuration stop_timeout .

Remarque: Rake Ts: Reconstructrice == Rake TS: STOP; Rake TS: index; Rake TS: Démarrez


3 commentaires

STOP_TIMEOUT Variable ne fonctionne pas, car j'ai essayé de la définir comme 1 seconde et le râteau non abandonné.


@Mirza Oui, ce réglage semble ne plus fonctionner.


Toute autre solution, a essayé le délai d'attente: 1 aussi qui n'a pas fonctionné, je suis coincé. J'utilise la pensée-sphinx 2.1



0
votes

Je suppose qu'après le déploiement de Capistrano, vous n'avez pas exécuté RAKE PENSION_SPHINX: Configurer

Il générerait un fichier de configuration Sphinx dans config / production.sphinx.conf

Essayez Ajouter pidfile à config / sphinx.yml xxx

Il veillera à trouver PID de Searchd à tuer

et ajouté le code suivant à config / déploy.rb xxx

pour générer un fichier de configuration SPHINX dans chaque dossier de version


0 commentaires

0
votes

le problème

Ce problème se produit si votre Searchd s'est écrasé ou que vous l'avez tué manuellement. Sous Windows, il ne remplace pas votre Seechd. .pid , alors l'ancien PID est enregistré et que les penséesPhinx ne vérifient pas les processus de fonctionnement réels de votre TaskManager. Donc, toutes ces commandes ( Rake Ts: Redémarrez, Rake Ts: Reconstructure, ... ) Ne fonctionnera pas, Rake va toujours abandonner et vous obtenez l'erreur RAKE ABORTED, ... SearchD déjà en cours d'exécution

la solution

Supprimer votre chemin-chemin-to / Your-App / Journal / Seechtd. .pid .

peut être développement ou production , en fonction de votre étape actuelle.

J'espère que cette réponse aidera le Googler.


0 commentaires