Rack verwenden

Im vorherigen Artikel haben Sie gelernt, was Rack ist. Jetzt ist es an der Zeit, Rack zu verwenden und einige Seiten bereitzustellen.

Hallo Welt

Beginnen wir zunächst mit einer „Hallo Welt“ -Anwendung. Diese Anwendung gibt unabhängig von der Art der Anforderung den Statuscode 200 (was HTTP-speak für „OK“ ist) und die Zeichenfolge zurück "Hallo Welt" als der Körper.

Bevor Sie den folgenden Code untersuchen, müssen Sie erneut die Anforderungen berücksichtigen, die eine Rack-Anwendung erfüllen muss.

Eine Rack-Anwendung ist ein beliebiges Ruby-Objekt, das auf die Aufrufmethode antwortet, einen einzelnen Hash-Parameter verwendet und ein Array zurückgibt, das den Antwortstatuscode, HTTP-Antwortheader und den Antworttext als Array von Zeichenfolgen enthält.
Klasse HelloWorld
def call (env)
return [200, , ["Hallo Welt!"]]
Ende
Ende

Wie Sie sehen, ein Objekt des Typs Hallo Welt wird alle diese Anforderungen erfüllen. Dies geschieht auf sehr minimale und nicht sonderlich nützliche Weise, erfüllt jedoch alle Anforderungen.

WEBrick

Das ist ziemlich einfach, jetzt schließen wir es an WEBrick (den mit Ruby gelieferten HTTP-Server) an. Dazu verwenden wir die Rack :: Handler :: WEBrick.run Methode, übergeben Sie es eine Instanz von Hallo Welt und der Port, auf dem ausgeführt werden soll. Ein WEBrick-Server wird jetzt ausgeführt, und Rack leitet Anforderungen zwischen dem HTTP-Server und Ihrer Anwendung weiter.

Beachten Sie, dass dies kein idealer Weg ist, um Dinge mit Rack zu starten. Es wird hier nur gezeigt, um etwas zum Laufen zu bringen, bevor in eine andere Funktion von Rack namens "Rackup" eingetaucht wird, die unten gezeigt wird. Die Verwendung von Rack :: Handler auf diese Weise hat einige Probleme. Erstens ist es nicht sehr konfigurierbar. Alles ist im Skript fest programmiert. Zweitens können Sie das Programm nicht beenden, wenn Sie das folgende Skript ausführen. Es reagiert nicht auf Strg-C. Wenn Sie diesen Befehl ausführen, schließen Sie einfach das Terminalfenster und öffnen Sie ein neues.

#! / usr / bin / env ruby
benötigen "Rack"
Klasse HelloWorld
def call (env)
return [200, , ["Hallo Welt!"]]
Ende
Ende
Rack :: Handler :: WEBrick.run (
HelloWorld.new,
: Port => 9000
)

Rackup

Dies ist zwar recht einfach, aber normalerweise wird Rack nicht so verwendet. Rack wird normalerweise mit einem Werkzeug namens verwendet Rackup. Rackup macht mehr oder weniger das, was im unteren Abschnitt des obigen Codes war, aber auf eine benutzerfreundlichere Weise. Rackup wird über die Befehlszeile ausgeführt und erhält eine .ru "Rackup-Datei". Dies ist nur ein Ruby-Skript, das unter anderem eine Anwendung an Rackup übermittelt.

Eine sehr einfache Rackup-Datei für das oben Genannte würde ungefähr so ​​aussehen.

Klasse HelloWorld
def call (env)
Rückkehr [
200,
'Content-Type' => 'text / html',
["Hallo Welt!"]
]
Ende
Ende
starte HelloWorld.new

Zuerst mussten wir eine winzige Änderung an der vornehmen Hallo Welt Klasse. Rackup führt eine Middleware-App namens aus Rack :: Lint diese Sanity-Checks Antworten. Alle HTTP-Antworten sollten ein Inhaltstyp Header, so dass hinzugefügt wurde. In der letzten Zeile wird nur eine Instanz der App erstellt und an die App übergeben Lauf Methode. Im Idealfall sollte Ihre Anwendung nicht vollständig in die Rackup-Datei geschrieben werden. Für diese Datei sollte Ihre Anwendung erforderlich sein und auf diese Weise eine Instanz davon erstellen. Die Rackup-Datei ist nur "Kleber", es sollte kein wirklicher Anwendungscode vorhanden sein.

Wenn Sie den Befehl ausführen rackup helloworld.ru, Auf Port 9292 wird ein Server gestartet. Dies ist der Standard-Rackup-Port.

Rackup bietet einige weitere nützliche Funktionen. Erstens können Dinge wie der Port in der Befehlszeile oder in einer speziellen Zeile im Skript geändert werden. Übergeben Sie in der Befehlszeile einfach a -p port Parameter. Beispielsweise: rackup -p 1337 helloworld.ru. Aus dem Skript selbst, wenn die erste Zeile mit beginnt # \, dann wird es genau wie die Befehlszeile analysiert. Sie können hier also auch Optionen definieren. Wenn Sie auf Port 1337 ausführen möchten, könnte die erste Zeile der Rackup-Datei lesen # \ -p 1337.