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" ] ]
end
Fü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 World
Rack 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 # default
Der 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 # default
Die 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_limit
Die 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-session
Bietet 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.