Das ganze Problem beim Einrichten eines Entwicklungsservers für meine Ruby on Rails-Anwendung verwirrt mich. Es gibt WEBrick, Mongrel, Passenger, Apache, Nginx und viele mehr, da bin ich mir sicher, und ich verstehe die verschiedenen Rollen, die sie spielen, nicht wirklich.
Ich habe angefangen, WEBrick zu verwenden, und jetzt verwende ich Mongrel für die Entwicklung. Sind diese Server eigenständig oder sitzen sie vor Apache?
Ich habe über Passenger gelesen und verstehe nicht wirklich, was es ist. Auf der Website heißt es "macht die Bereitstellung von Ruby-Webanwendungen zum Kinderspiel". Ersetzt sie Mongrel? Ist es wie Capistrano, das auch Webanwendungen bereitstellt?
Wenn ich bedenke, dass ich SSL testen möchte und ich glaube, dass dies von mongrel nicht unterstützt wird, was ist das beste Setup für Entwicklungsserver?
Vielen Dank
Antworten:
Das Wort "Bereitstellung" kann je nach Kontext zwei Bedeutungen haben. Sie verwechseln auch die Rollen von Apache / Nginx mit den Rollen anderer Komponenten.
Historischer Hinweis: Dieser Artikel wurde ursprünglich am 6. November 2010 verfasst, als das Ruby App Server-Ökosystem eingeschränkt war. Ich habe diesen Artikel am 15. März 2013 mit den neuesten Updates im Ökosystem aktualisiert.
Haftungsausschluss : Ich bin einer der Autoren von Phusion Passenger, einem der App-Server.
Apache gegen Nginx
Sie sind beide Webserver. Sie können statische Dateien bereitstellen, aber mit den richtigen Modulen auch dynamische Webanwendungen, z. B. solche, die in PHP geschrieben wurden. Apache ist beliebter und hat mehr Funktionen, Nginx ist kleiner und schneller und hat weniger Funktionen.
Weder Apache noch Nginx können Ruby-Web-Apps sofort bereitstellen. Dazu müssen Sie Apache / Nginx in Kombination mit einem später beschriebenen Add-On verwenden.
Apache und Nginx können auch als Reverse-Proxys fungieren. Dies bedeutet, dass sie eine eingehende HTTP-Anforderung entgegennehmen und an einen anderen Server weiterleiten können, der auch HTTP spricht. Wenn dieser Server mit einer HTTP-Antwort antwortet, leitet Apache / Nginx die Antwort an den Client zurück. Sie werden später erfahren, warum dies relevant ist.
Mongrel und andere Produktions-App-Server gegen WEBrick
Mongrel ist ein Ruby "Anwendungsserver": Konkret bedeutet dies, dass Mongrel eine Anwendung ist, die:
Obwohl Mongrel ziemlich veraltet ist, wird es heutzutage nicht mehr gepflegt. Neuere alternative Anwendungsserver sind:
Ich werde sie später behandeln und beschreiben, wie sie sich voneinander und von Mongrel unterscheiden.
WEBrick macht dasselbe wie Mongrel, aber die Unterschiede sind:
Der App Server und die Welt
Alle aktuellen Ruby-App-Server sprechen HTTP. Einige App-Server sind jedoch möglicherweise direkt an Port 80 dem Internet ausgesetzt, andere möglicherweise nicht.
Warum müssen einige App-Server hinter einen Reverse-Proxy gestellt werden?
Warum können einige App-Server direkt dem Internet ausgesetzt werden?
Anwendungsserver verglichen
In diesem Abschnitt werde ich die meisten Anwendungsserver vergleichen, die ich erwähnt habe, aber nicht Phusion Passenger. Phusion Passenger ist so ein anderes Tier als die anderen, dass ich ihm einen eigenen Abschnitt gegeben habe. Ich habe auch Trinidad und TorqueBox weggelassen, weil ich sie nicht gut genug kenne, aber sie sind sowieso nur relevant, wenn Sie JRuby verwenden.
Phusion Passagier
Phusion Passenger arbeitet ganz anders als alle anderen. Phusion Passenger lässt sich direkt in Apache oder Nginx integrieren und kann daher mit mod_php für Apache verglichen werden. Genau wie mod_php es Apache ermöglicht, PHP-Apps fast magisch zu bedienen, erlaubt Phusion Passenger Apache (und auch Nginx!), Ruby-Apps fast magisch zu bedienen. Das Ziel von Phusion Passenger ist es, alles so einfach wie möglich zu gestalten.
Anstatt einen Prozess oder Cluster für Ihre App zu starten und Apache / Nginx so zu konfigurieren, dass statische Dateien bereitgestellt und / oder Proxy-Anforderungen mit Phusion Passenger an den Prozess / Cluster umgekehrt werden, müssen Sie nur:
Die gesamte Konfiguration erfolgt in der Webserver-Konfigurationsdatei. Phusion Passenger automatisiert so ziemlich alles. Es ist nicht erforderlich, einen Cluster zu starten und Prozesse zu verwalten. Starten / Stoppen von Prozessen, Neustarten bei einem Absturz usw. - alles automatisiert. Im Vergleich zu anderen App-Servern hat Phusion Passenger weit weniger bewegliche Teile. Diese Benutzerfreundlichkeit ist einer der Hauptgründe, warum Menschen Phusion Passenger verwenden.
Auch im Gegensatz zu anderen App-Servern ist Phusion Passenger hauptsächlich in C ++ geschrieben, was es sehr schnell macht.
Es gibt auch eine Enterprise-Variante von Phusion Passenger mit noch mehr Funktionen wie automatisierten Rolling-Neustarts, Multithreading-Unterstützung, Beständigkeit gegen Bereitstellungsfehler usw.
Aus den oben genannten Gründen ist Phusion Passenger derzeit der beliebteste Ruby-App-Server und versorgt über 150.000 Websites, darunter große wie die New York Times, Pixar, Airbnb usw.
Phusion Passenger gegen andere App-Server
Phusion Passenger bietet viel mehr Funktionen und viele Vorteile gegenüber anderen App-Servern, wie z.
Arbeitslasten, in denen Unicorn nicht gut ist, sind:
Das Hybrid-E / A-Modell in Phusion Passenger Enterprise 4 oder höher macht es zu einer hervorragenden Wahl für diese Art von Workloads.
Es gibt mehr Funktionen und Vorteile, aber die Liste ist wirklich lang. Weitere Informationen finden Sie im umfassenden Phusion Passenger-Handbuch ( Apache-Version , Nginx-Version ) oder auf der Phusion Passenger-Website .
E / A-Parallelitätsmodelle
Kürzlich wurde im Phusion-Blog ein Artikel veröffentlicht, in dem es darum geht, die Anzahl der Prozesse und Threads angesichts Ihrer Arbeitslast optimal zu optimieren. Siehe Einstellen der Parallelitätseinstellungen von Phusion Passenger .
Capistrano
Capistrano ist etwas ganz anderes. In allen vorherigen Abschnitten bezieht sich "Bereitstellung" auf das Starten Ihrer Ruby-App auf einem Anwendungsserver, damit sie für Besucher zugänglich wird. Bevor dies jedoch geschehen kann, müssen in der Regel einige Vorbereitungsarbeiten durchgeführt werden, z.
Im Kontext von Capistrano bezieht sich "Bereitstellung" auf all diese Vorbereitungsarbeiten. Capistrano ist kein Anwendungsserver. Stattdessen ist es ein Werkzeug zur Automatisierung all dieser Vorbereitungsarbeiten. Sie teilen Capistrano bei jeder Bereitstellung einer neuen Version Ihrer App mit, wo sich Ihr Server befindet und welche Befehle ausgeführt werden müssen, und Capistrano kümmert sich darum, die Rails-App für Sie auf den Server hochzuladen und die von Ihnen angegebenen Befehle auszuführen.
Capistrano wird immer in Kombination mit einem Anwendungsserver verwendet. Es ersetzt keine Anwendungsserver. Umgekehrt ersetzen Anwendungsserver Capistrano nicht, sondern können in Kombination mit Capistrano verwendet werden.
Natürlich müssen Sie nicht haben zu Capistrano verwenden. Wenn Sie Ihre Ruby-App lieber mit FTP hochladen und jedes Mal dieselben Befehlsschritte manuell ausführen möchten, können Sie dies tun. Andere Leute haben es satt und automatisieren diese Schritte in Capistrano.
quelle