Ich finde, dass die Denksphinx manchmal Fehler macht, wenn ich versuche, ihre Rechenaufgaben auszuführen. Manchmal funktionieren die Aufgaben gut und manchmal erhalte ich Fehler wie den folgenden.
Ich führe die Aufgaben als normaler Benutzer aus, nicht als root. Nicht mit Sudo.
Im folgenden Beispiel wird searchd weiterhin ausgeführt, nachdem die Rake-Task fehlgeschlagen ist.
Ich habe auch ähnliche Fehler mit ts:rebuild
gesehen.
Hat jemand anderes das gesehen?
Ich benutze Sphinx 0.9.9-release (r2117)
Ich benutze Thinking Sphinx 1.4.4 anstelle der neuesten Version, weil ich auf Rails 2.3.11 bin.
%Vor%Ich habe den Befehl 'ps | grep searchd 'um die Prozess ID zu bekommen, aber ich habe es nicht verstanden. Dann habe ich den Befehl 'pgrep searchd' versucht, es gibt mir die Prozess-ID. Ich habe diesen Prozess beendet und den Befehl 'Rake ts: rebuild' ausgeführt. Es funktionierte.
Ich habe über die gesamte Erfahrung blogged hier (Disclaimer: I bin der Autor).
In thinking_sphinx 1.4.4 gibt es ein 5 Sekunden Timeout auf rake ts:stop
Wenn rake ts:stop
nahe oder länger als 5 Sekunden dauert, wird Ruby eine Ausnahme auslösen.
Ich benutze in der Zwischenzeit die thinking_sphinx 1.3.18. (Es gibt keine Zeitüberschreitung bei 1.3.18).
Ich habe auch einen Patch an das Github-Repository gesendet und das Timeout wird mit einem sphinx.yml
konfigurierbar sein. Konfigurationsvariable stop_timeout
.
HINWEIS: rake ts:rebuild
== rake ts:stop; rake ts:index; rake ts:start
Ich denke nach der Bereitstellung durch capistrano hast du rake thinking_sphinx:configure
nicht ausgeführt
es würde Sphinx-Konfigurationsdatei in config/production.sphinx.conf
Versuchen Sie, pidfile zu config/sphinx.yml
es wird sicherstellen, dass pid von searchd to kill
gefunden wird und folgenden Code zu config/deploy.rb
um die Sphinx-Konfigurationsdatei in jedem Release-Ordner zu erstellen
Das Problem
Dieses Problem tritt auf, wenn Ihr searchd abgestürzt ist oder Sie es manuell beendet haben. Unter Windows wird Ihr searchd.<environment>.pid
nicht überschrieben, so dass immer noch die alte PID gespeichert wird und ThinkingSphinx die wirklich laufenden Prozesse in Ihrem Taskmanager nicht überprüft. Also werden alle diese Befehle ( rake ts:restart, rake ts:rebuild, ...
) nicht funktionieren, Rake wird immer abgebrochen und du bekommst den Fehler rake aborted, ... searchd already running
Die Lösung
Löschen Sie Ihre path-to/your-app/log/searchd.<environment>.pid
.
<environment>
kann development
oder production
sein, abhängig von Ihrer aktuellen Phase.
Ich hoffe, diese Antwort wird dem Googler helfen.
Tags und Links ruby-on-rails thinking-sphinx sphinx