Um auf den Zug von Phusion Passenger zu springen, haben wir einen Staging-Server für eine kleine Rails-App eingerichtet, um die Dinge zu testen.
Bisher war es sehr schön zu bedienen, es macht das Installieren / Konfigurieren und Bereitstellen von Apps zum Kinderspiel. Das Problem ist, dass die von uns verwendete Site nicht sehr oft getroffen wird und die Server im Hintergrund herunterzufahren scheint. Das heißt, wenn jemand die Site besucht, muss er sehr lange warten, bis ein neuer Server gestartet wird, um die Anforderung zu bearbeiten. Wir haben die Dokumentation gelesen, einige verschiedene Einstellungen ausprobiert (Smart / Smart-Lv2-Modi, Passagierzeit usw.) und immer noch keine echte Lösung gefunden.
Nach dem Durchsuchen der Google-Ergebnisse können wir keine wirklich nützlichen Informationen finden. Derzeit haben wir einen Cron-Job, der von Zeit zu Zeit eine Anfrage stellt, um die Server am Laufen zu halten.
Tritt bei jemand anderem dieses Problem auf und haben Sie Ratschläge für eine Lösung?
quelle
Antworten:
Was passiert ist, dass Ihre Anwendung und / oder ApplicationSpawners aufgrund einer Zeitüberschreitung heruntergefahren werden. Um Ihre neue Anfrage zu bearbeiten, muss Passenger eine neue Kopie Ihrer Anwendung starten, was selbst auf einem schnellen Computer einige Sekunden dauern kann. Um das Problem zu beheben, gibt es einige Apache-Konfigurationsoptionen, mit denen Sie Ihre Anwendung am Leben erhalten können.
Hier ist speziell, was ich auf meinen Servern getan habe. Die PassengerSpawnMethod und PassengerMaxPreloaderIdleTime sind die Konfigurationsoptionen, die in Ihrer Situation am wichtigsten sind.
Wenn Sie den "intelligenten" Laichmodus verwenden und PassengerMaxPreloaderIdleTime deaktivieren, speichert Passenger immer 1 Kopie Ihrer Anwendung im Speicher (nach der ersten Anforderung nach dem Starten von Apache). Einzelne
Application
Hörer werdenfork
aus dieser Kopie herausgeschnitten, was eine supergünstige Operation ist. Es passiert so schnell, dass Sie nicht sagen können, ob Ihre Anwendung einen Listener erzeugen musste oder nicht.Wenn Ihre App nicht mit Smart Spawning kompatibel ist, würde ich empfehlen, eine große PassengerPoolIdleTime beizubehalten und Ihre Website regelmäßig mit Curl und einem Cronjob oder Monit oder etwas anderem aufzurufen, um sicherzustellen, dass der Hörer am Leben bleibt.
Das Passagier-Benutzerhandbuch ist eine hervorragende Referenz für diese und weitere Konfigurationsoptionen.
Bearbeiten : Wenn Ihre App nicht mit Smart Spawning kompatibel ist, gibt es einige neue Optionen , die sehr hilfreich sind
Wenn Sie also PassengerPreStart und PassengerMinInstances kombinieren, wird Passenger unmittelbar nach dem Laden von Apache 3 Instanzen hochfahren und immer mindestens 3 Instanzen hochhalten, sodass Ihre Benutzer selten (wenn überhaupt) eine Verzögerung feststellen.
Wenn Sie bereits Smart Spawning (empfohlen) verwenden
PassengerMaxPreloaderIdleTime 0
, können Sie hinzufügenPassengerPreStart
, um den zusätzlichen Vorteil eines sofortigen Starts zu erhalten.Vielen Dank an die Helden von phusion.nl !
quelle
RailsSpawnMethod
wird zugunsten vonPassengerSpawnMethod
modrails.com/documentation/…Nur für den Fall, dass Benutzer von Nginx-Servern auf diese Frage stoßen, werden die Anweisungen 'PassengerMaxRequests' und 'PassengerStatThrottleRate' nicht in Nginx übersetzt. Die anderen tun jedoch:
HTH!
EDIT
rails_spawn_method
wird in Passagier 3 nicht mehr verwendetAlles andere ist bis heute gut.
quelle
"passenger_max_preloader_idle_time" directive is duplicate
Sie können auch PassengerMinInstances verwenden:
http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerMinInstances
Dies kann mit PassengerPreStart kombiniert werden
quelle
RE:
Nur etwas hinzuzufügen und könnte nützlich sein.
Die Standard-Spawn-Methode in der aktuellen Version ist "smart-lv2", wodurch das Framework-Spawner übersprungen wird. Das Festlegen des Framework-Spawner-Timeouts hat daher ohnehin keine Auswirkungen, es sei denn, Sie setzen die Spawn-Methode explizit auf "smart".
Quelle: http://groups.google.com/group/phusion-passenger/browse_thread/thread/c21b8d17cdb073fd?pli=1
quelle
Wenn Ihr Host ein gemeinsam genutzter Server ist, wie meiner, können Sie die Einstellungen nicht ändern und bleiben bei einem Cron-Job hängen.
quelle
Ich hatte auch dieses Problem, konnte aber die Passagiereinstellungen nicht ändern, da ich keine Schreibberechtigung für diese Datei hatte. Ich habe ein Werkzeug gefunden ( http://www.wekkars.com ), mit dem meine App schnell reagiert. Vielleicht kann dies auch eine Lösung für Sie sein.
quelle
Überprüfen Sie die Version des Passagiers. es war RailsSpawnMethod
<string>
für alte Versionen.Wenn ja (wenn ich mich richtig erinnere), ersetzen Sie den Passagier in allen Konfigurationsanweisungen durch Schienen oder suchen Sie nach alten Passagierdokumenten, um weitere Informationen zu erhalten
quelle