
Rack bietet eine minimale, modulare und anpassbare Schnittstelle für die Entwicklung von Webanwendungen in Ruby. Durch die möglichst einfache Verpackung von HTTP-Anfragen und -Antworten wird die Brücke zwischen Webservern, Web-Frameworks und Webanwendungen in einem einzigen Methodenaufruf vereinheitlicht und destilliert.
Die genauen Einzelheiten dazu sind in der Rack-Spezifikation beschrieben, der alle Rack-Anwendungen entsprechen sollten.
| Version | Unterstützung |
|---|---|
| 3.1.x | Fehlerbehebungen und Sicherheitspatches. |
| 3.0.x | Nur Sicherheitspatches. |
| 2.2.x | Nur Sicherheitspatches. |
| <= 2.1.x | Ende des Supports. |
Weitere Informationen finden Sie in der Sicherheitsrichtlinie.
Dies ist die neueste Version von Rack. Es enthält Fehlerbehebungen und Sicherheitspatches. Detaillierte Informationen zu bestimmten Änderungen finden Sie im Änderungsprotokoll.
Diese Rack-Version enthält wesentliche Änderungen, die im Upgrade-Handbuch detailliert beschrieben werden. Es wird empfohlen, so bald wie möglich ein Upgrade auf Rack 3 durchzuführen, um die neuesten Funktionen und Sicherheitspatches zu erhalten.
Diese Rack-Version erhält nur Sicherheitspatches und es sollten Anstrengungen unternommen werden, auf Rack 3 umzusteigen.
Ab Ruby 3.4 ist die base64 Abhängigkeit kein Standard-Gem mehr und kann eine Warnung oder einen Fehler bezüglich des Fehlens base64 verursachen. Um dies zu beheben, fügen Sie Ihrem Projekt base64 als Abhängigkeit hinzu.
Fügen Sie das Rack-Gem zu Ihrem Anwendungspaket hinzu oder folgen Sie den Anweisungen eines unterstützten Web-Frameworks:
# Install it generally:
$ gem install rack
# or, add it to your current application gemfile:
$ bundle add rack Wenn Sie Funktionen von Rack::Session oder bin/rackup benötigen, fügen Sie diese Edelsteine bitte separat hinzu.
$ gem install rack-session rackup Erstellen Sie eine Datei namens config.ru mit folgendem Inhalt:
run do | env |
[ 200 , { } , [ "Hello World" ] ]
endFühren Sie dies mit dem Rackup-Gem oder einem anderen unterstützten Webserver aus.
$ gem install rackup
$ rackup
# In another shell:
$ curl http://localhost:9292
Hello WorldRack wird von einer Vielzahl von Servern unterstützt, darunter:
Sie müssen die Serverdokumentation konsultieren, um herauszufinden, welche Funktionen und Einschränkungen sie möglicherweise haben. Im Allgemeinen wird jede gültige Rack-App auf allen diesen Servern gleich ausgeführt, ohne dass sich etwas ändert.
Rack bietet ein separates Gem, Rackup, eine generische Schnittstelle zum Ausführen einer Rack-Anwendung auf unterstützten Servern, darunter WEBRick , Puma , Falcon und andere.
Diese und viele andere Frameworks unterstützen die Rack-Spezifikation:
Zwischen dem Server und dem Framework kann Rack mithilfe von Middleware an Ihre Anwendungsanforderungen angepasst werden. Rack selbst wird mit der folgenden Middleware geliefert:
Rack::CommonLogger zum Erstellen von Protokolldateien im Apache-Stil.Rack::ConditionalGet für die Rückgabe von „Not Modified“-Antworten, wenn sich die Antwort nicht geändert hat.Rack::Config zum Ändern der Umgebung vor der Verarbeitung der Anfrage.Rack::ContentLength zum Festlegen eines Headers content-length basierend auf der Körpergröße.Rack::ContentType zum Festlegen eines Standard content-type Headers für Antworten.Rack::Deflater zum Komprimieren von Antworten mit gzip.Rack::ETag zum Festlegen etag Headers für Körper, die gepuffert werden können.Rack::Events zur Bereitstellung einfacher Hooks beim Empfang einer Anfrage und beim Senden der Antwort.Rack::Files zum Bereitstellen statischer Dateien.Rack::Head für die Rückgabe eines leeren Körpers für HEAD-Anfragen.Rack::Lint zur Überprüfung der Konformität mit der Rack-Spezifikation.Rack::Lock zum Serialisieren von Anfragen mithilfe eines Mutex.Rack::MethodOverride zum Ändern der Anforderungsmethode basierend auf einem übermittelten Parameter.Rack::Recursive zum Einbeziehen von Daten aus anderen Pfaden in der Anwendung und zum Durchführen interner Umleitungen.Rack::Reloader zum erneuten Laden von Dateien, wenn diese geändert wurden.Rack::Runtime zum Einfügen eines Antwortheaders mit der für die Verarbeitung der Anfrage benötigten Zeit.Rack::Sendfile für die Arbeit mit Webservern, die optimierte Dateibereitstellung für Dateisystempfade verwenden können.Rack::ShowException zum Abfangen nicht behandelter Ausnahmen und deren ansprechender und hilfreicher Darstellung mit anklickbarem Backtrace.Rack::ShowStatus zur Verwendung netter Fehlerseiten für leere Client-Fehlerantworten.Rack::Static für eine besser konfigurierbare Bereitstellung statischer Dateien.Rack::TempfileReaper zum Entfernen temporärer Dateien, die während einer Anfrage erstellt werden.Alle diese Komponenten nutzen die gleiche Schnittstelle, die in der Rack-Spezifikation ausführlich beschrieben ist. Diese optionalen Komponenten können Sie beliebig nutzen.
Wenn Sie außerhalb vorhandener Frameworks entwickeln, eigene Frameworks implementieren oder Middleware entwickeln möchten, bietet Rack viele Helfer, um Rack-Anwendungen schnell und ohne die gleichen Web-Aufgaben zu erstellen:
Rack::Request , das auch das Parsen von Abfragezeichenfolgen und die Verarbeitung mehrerer Teile ermöglicht.Rack::Response zur komfortablen Generierung von HTTP-Antworten und zur Cookie-Verwaltung.Rack::MockRequest und Rack::MockResponse für effizientes und schnelles Testen der Rack-Anwendung ohne echte HTTP-Roundtrips.Rack::Cascade zum Ausprobieren weiterer Rack-Anwendungen, wenn eine Anwendung die Antwort „Nicht gefunden“ oder „Methode nicht unterstützt“ zurückgibt.Rack::Directory zum Bereitstellen von Dateien in einem bestimmten Verzeichnis mit Verzeichnisindizes.Rack::MediaType zum Parsen von Inhaltstyp-Headern.Rack::Mime zur Bestimmung des Inhaltstyps basierend auf der Dateierweiterung.Rack::RewindableInput um jedes E/A-Objekt mithilfe eines temporären Dateipuffers rückspulbar zu machen.Rack::URLMap zum Weiterleiten an mehrere Anwendungen innerhalb desselben Prozesses. Rack stellt mehrere Konfigurationsparameter zur Verfügung, um verschiedene Funktionen der Implementierung zu steuern.
param_depth_limit Rack :: Utils . param_depth_limit = 32 # defaultDer maximal zulässige Verschachtelungsumfang in Parametern. Wenn es beispielsweise auf 3 gesetzt ist, wäre diese Abfragezeichenfolge zulässig:
?a[b][c]=d
aber diese Abfragezeichenfolge wäre nicht zulässig:
?a[b][c][d]=e
Durch die Begrenzung der Tiefe wird ein möglicher Stapelüberlauf beim Parsen von Parametern verhindert.
multipart_file_limit Rack :: Utils . multipart_file_limit = 128 # defaultDie maximale Anzahl von Teilen mit einem Dateinamen, die eine Anfrage enthalten kann. Das Akzeptieren zu vieler Teile kann dazu führen, dass dem Server die Dateihandles ausgehen.
Der Standardwert ist 128, was bedeutet, dass eine einzelne Anfrage nicht mehr als 128 Dateien gleichzeitig hochladen kann. Auf 0 setzen, um keine Begrenzung zu erhalten.
Kann auch über die Umgebungsvariable RACK_MULTIPART_FILE_LIMIT festgelegt werden.
(Aus Kompatibilitätsgründen wird dies auch als multipart_part_limit und RACK_MULTIPART_PART_LIMIT bezeichnet.)
multipart_total_part_limitDie maximale Gesamtzahl an Teilen, die eine Anfrage beliebiger Art enthalten kann, einschließlich Datei- und Nicht-Datei-Formularfeldern.
Der Standardwert ist 4096, was bedeutet, dass eine einzelne Anfrage nicht mehr als 4096 Teile enthalten kann.
Auf 0 setzen, um keine Begrenzung zu erhalten.
Kann auch über die Umgebungsvariable RACK_MULTIPART_TOTAL_PART_LIMIT festgelegt werden.
Siehe CHANGELOG.md.
Spezifische Details dazu, wie Sie einen Beitrag für Rack leisten können, finden Sie unter CONTRIBUTING.md.
Bitte posten Sie Fehler, Vorschläge und Patches auf GitHub Issues.
Bitte lesen Sie unsere Sicherheitsrichtlinie für die verantwortungsvolle Offenlegung und den Prozess zur Meldung von Sicherheitsfehlern. Aufgrund der breiten Nutzung der Bibliothek wird es dringend empfohlen, dass wir den Zeitplan so steuern, dass zum Zeitpunkt der Offenlegung brauchbare Patches bereitgestellt werden. Ihre Unterstützung in dieser Angelegenheit wird sehr geschätzt.
rackup Ein nützliches Tool zum Ausführen von Rack-Anwendungen über die Befehlszeile, einschließlich Rackup::Server (früher Rack::Server ) für Skriptserver.
rack-contrib Die Fülle an nützlicher Middleware machte ein Projekt erforderlich, das frische Rack-Middleware sammelt. rack-contrib enthält eine Vielzahl von Zusatzkomponenten für Rack und es ist einfach, neue Module beizusteuern.
rack-sessionBietet eine praktische Sitzungsverwaltung für Rack.
Das Rack Core Team, bestehend aus
und die Rack-Alumni
möchte mich bedanken bei:
Rack::Deflater .Rack::ContentType .Rack::Response Schnittstelle.Rack::Response .Rack wird unter der MIT-Lizenz veröffentlicht.