2009-11-22 23 views
2

Je travaille sur la mise en place d'un serveur de production en utilisant CentOS 5.3, Apache et Phusion Passenger (mod_rails). J'ai une application qui utilise le moteur de recherche Sphinx et la gemme Thinking Sphinx.Comment puis-je m'assurer que le démon Sphinx fonctionne?

Selon the Thinking Sphinx docs...

Si vous voulez vraiment effectuer la recherche les données indexées, alors vous aurez besoin démon searchd du Sphinx pour être en cours d'exécution. Ceci peut être contrôlé à l'aide des tâches suivantes:

rake thinking_sphinx:start 
rake ts:start 
rake thinking_sphinx:stop 
rake ts:stop 

Quelle serait la meilleure façon de faire en sorte que cela se produit dans la production? Je peux déployer mon application, puis exécuter manuellement rake thinking_sphinx:start, mais j'aime configurer les choses de sorte que si je dois rebondir sur le serveur, tout reviendra.

Devrais-je mettre un appel à cette tâche Rake dans un initialiseur? Ou quelque chose dans rc.local?

Répondre

4

rc.local est un bon début, mais ce n'est pas suffisant. Je voudrais coupler est avec une règle monit pour assurer qu'il fonctionne et plus important encore ...

Sphinx nécessite un réindex complet pour faire tout le plus grand et le plus grand disponible. Il y a du doco sur le site de sphinx de la pensée sur delta indexing, mais si votre index est petit, un ré-index horaire prendra soin de choses et vous n'avez pas besoin de l'indexation delta.

Je dirige cette heure pour prendre soin de cette:

0 * * * * cd /var/rails/my_site/current/ && RAILS_ENV=production /usr/bin/rake ts:rebuild 

Note: pour le déploiement, je vais utiliser le construit dans la pensée des tâches Capistrano de sphynx:

Dans votre Capfile ajouter

require 'thinking_sphinx/deploy/capistrano' 

J'avais l'habitude d'enchaîner la ré-indexation dans la tâche de chapeau mais arrêtée parce qu'elle est vraiment lente, quand je fais des changements de schéma je me souviendrais de l'exécuter ou attendre le travail de cron horaire pour le réparer.

+0

Si un utilisateur effectue une recherche pendant que la réindexation est en cours, ne recevra-t-il pas une erreur? – Ethan

+0

yerp, il fait mourir la recherche lorsque vous reconstruisez, je vous suggère d'ajouter une nouvelle tentative de compensation (réessayez jusqu'à 20 secondes, ou affichez une page personnalisée indiquant que la recherche sera bientôt disponible). (probablement une bonne idée pour pat à ajouter ceci à ts) –

+0

vous avez également besoin d'un moyen de démarrer le démon si vous devez redémarrer le serveur. – holaSenor

1

Je ne l'ai pas fait auparavant avec Spinix, donc j'espère que quelqu'un peut vous donner une meilleure réponse, mais vous devriez jeter un oeil à monit. Monit est conçu pour garder les démons en fonctionnement, tout comme ce que vous devez faire. Un rapide Google pour spinix monit mis en place ce lien: Capistrano recipes: sphinx:monit. Ce serait un bon point de départ.

0

Pour ce que ça vaut, je suis en

thinking_sphinx:index 

... dans mon travail cron, au lieu de la tâche « reconstruire ». Cela ne nécessite pas que le processus searchd soit hors ligne, mais les index sont toujours pivotés quand c'est fait, ainsi les nouveaux changements sont ramassés. Je pense que la tâche "reconstruire" n'est nécessaire que lorsque vous modifiez réellement la structure de votre index dans vos modèles, ce qui arrive très rarement pour moi.