2009-11-13 7 views
14

Sehr bald plane ich die Bereitstellung meiner ersten Ruby on Rails-Anwendung in einer Produktionsumgebung und ich habe sogar einen Webhost mit all dem verwalteten Server und Capistrano-Güte ausgewählt. d von einem RoR-Anbieter erwarten.Empfehlungen (und Unterschiede) zwischen verschiedenen Ruby on Rails-Produktions-Webservern

Der Anbieter erlaubt Mongrel, Thin, Passagier & FastCGI-Webserver, die sehr flexibel scheint, aber ich kenne ehrlich gesagt nicht die Unterschiede zwischen ihnen. Ich habe mir einige angeschaut, aber es wird ein bisschen viel, wenn sie anfangen, über Features und maximale gleichzeitige Anfragen zu sprechen - und dass diese Daten zu variieren scheinen, je nachdem, wer sie veröffentlicht.

Ich habe Passagier (auf der Oberfläche) - die scheint sehr ansprechend für mich - aber ich hatte den Eindruck, dass Passenger nicht der eigentliche Webserver war, und stattdessen war eher wie eine Schicht auf Apache oder nginx und gemanagte Instanzen der Anwendung (wie ein Mongrel-Cluster).

Kann mir bitte jemand direkt mit den Unterschieden in Laien Begriff, so dass ich weise wählen kann (denn jeder, der Indiana Jones und der letzte Kreuzzug gesehen weiß, was passiert, wenn Sie schlecht wählen).

+1

Dieser Link könnte hilfreich sein: http://tenmiles.com/blog/2010/08/apache-passenger-and-other-server-alternatives-rails/ –

Antwort

33

Kurze Antwort

Gehen Sie mit Apache/Nginx + Passagier. Passagier is fast, zuverlässig, einfach zu konfigurieren und zu implementieren. Passenger wurde von einer großen Anzahl von großen Rails-Anwendungen übernommen, einschließlich Shopify.

alt text http://www.modrails.com/images/passenger_mongrel_thin_benchmark.png

Die lange Antwort

über CGI und FastCGI Vergessen. Am Anfang gab es keine anderen Alternativen, deshalb war die einzige Möglichkeit, Rails zu benutzen, CGI oder der schnellere Browser FastCGI. Heutzutage betreibt fast niemand Rails unter CGI. Die neuesten Rails-Versionen bieten keine .cgi und .fcgi-Runner mehr.

Mongrel ist eine weitgehend angenommene Lösung, der beste Ersatz für CGI und FCGI. Viele Standorte verwenden immer noch Mongrel- und Mongrel-Cluster, das Mongrel-Projekt ist jedoch fast tot und viele Projekte wurden bereits in andere Lösungen (hauptsächlich Passagier) verlagert. Auch eine Mongrel-basierte Architektur ist ziemlich schwer zu konfigurieren, da sie einen Frontend-Proxy (Thin, Ngnix) und eine Backend-Architektur benötigt, die aus mehreren Mongrel-Instanzen besteht.

Passagier hat seit seiner Veröffentlichung breite Aufmerksamkeit gewonnen. Viele Projekte wechselten von Mongrel zu Passenger aus vielen Gründen, einschließlich (aber nicht beschränkt auf) einfache Bereitstellung, Wartbarkeit und Leistung. Darüber hinaus ist Passener nun sowohl für Apache als auch für Ngnix verfügbar.

Die einfachste Möglichkeit, Passenger zu verwenden, ist die Apache + Passenger-Konfiguration. Eine Apache-Installation und mehrere Passenger-Prozesse.

Wenn Sie eine bessere Leistung und Skalierbarkeit benötigen, können Sie Ngnix als Front-End-Proxy verwenden und alle Rails-Anforderungen an mehrere Backend-Server weiterleiten, die jeweils aus Apache + Passenger bestehen. Ich gehe hier nicht auf die technischen Details ein, diese Lösung soll von Rails-Projekten mit hohem Verkehrsaufkommen verwendet werden.

Noch komplexere Lösungen beinhalten eine Kombination verschiedener Ebenen, einschließlich HTTP-Proxies und Servern.Sie können eine Idee davon haben, wovon ich rede, einige interne Details von GitHub und Heroku zu lesen.

Gerade jetzt ist Passenger die beste Antwort für die meisten Rails-Projekte.

+1

Ausgezeichnete Antwort. –

9

Mongrel und Thin sind einzelne Ruby-Prozess-Server, die Sie als Cluster hinter einem bestimmten Proxy-Typ ausführen (wie Apache oder Nginx). Der Proxy würde verwalten, welche Instanz von Mongrel oder Thin die Anfragen bedient.

Passenger stellt eine Schnittstelle zwischen Apache oder Nginx her, die einen Application-Launch-Prozess erstellt und dann Prozesse ausschickt, um eingehende Anfragen zu verwalten, sobald sie eintreffen. Es gibt viele Konfigurationsoptionen für die Dauer dieser Prozesse und deren Anzahl kann sein, und wie viele Anfragen werden sie erfüllen, bevor sie sterben. Dies ist bei weitem die üblichste Methode, um eine Anwendung mit hohem Datenverkehr zu skalieren und zu handhaben, aber sie ist nicht ohne Nachteile. Dies kann nur auf einem * nix-Betriebssystem (Linux, Mac OS X, usw.) erfolgen. Außerdem laufen diese Prozesse bei Bedarf hoch, sodass, wenn niemand eine Zeit lang auf Ihre Site zugreift, die Prozesse ablaufen und die nächste Anfrage die Verzögerung hat, dass sie erneut gestartet wird. Mit Mongrel und Thin läuft der Prozess immer. Manchmal sind Ihre Prozesse jedoch neu und frisch und können eine gute Sache für die Speichernutzung usw. sein.

Wenn es sich um eine Website mit relativ geringem Datenaufkommen handelt, bietet Mongrel oder Thin eine einfache, einfach zu verwaltende Möglichkeit zur Bereitstellung der Anwendung . Für höher frequentierte Standorte, wo Sie die intelligente Warteschlangen- und Prozessverwaltung von etwas wie Passenger benötigen, ist dies eine sehr gute Lösung.

Wie für fastcgi, möchten Sie wahrscheinlich das als letzte Option verwenden.

1

Ich benutze Passenger + nginx. Es funktioniert wirklich sehr gut.

1

Um einige sofortige Leistung rühmen mit Passagier, empfehle ich Ruby Enterprise Edition.