In dem Vorheriger ArtikelDu hast gelernt, was Rack ist. Jetzt ist es an der Zeit, Rack zu verwenden und einige Seiten bereitzustellen.
Hallo Welt
Beginnen wir zunächst mit einem „Hallo WeltAnwendung. Diese Anwendung gibt unabhängig von der Art der Anfrage einen Statuscode von 200 (HTTP-sprechend für "OK") und die Zeichenfolge zurück "Hallo Welt" wie der Körper.
Berücksichtigen Sie vor der Prüfung des folgenden Codes erneut die Anforderungen, die eine Rack-Anwendung erfüllen muss.
Eine Rack-Anwendung ist ein beliebiges Ruby-Objekt, das auf die Aufrufmethode reagiert, einen einzelnen Hash-Parameter und verwendet Gibt ein Array zurück, das den Antwortstatuscode, die HTTP-Antwortheader und den Antworttext als Array von enthält Saiten.
Klasse HelloWorld
def call (env)
return [200, {}, ["Hallo Welt!"]]
Ende
Ende
Wie Sie sehen können, ein Objekt des Typs Hallo Welt wird all diese Anforderungen erfüllen. Dies geschieht auf sehr minimale und nicht besonders nützliche Weise, erfüllt jedoch alle Anforderungen.
WEBrick
Das ist ziemlich einfach. Jetzt schließen wir es an WEBrick (den mitgelieferten HTTP-Server) an Rubin). 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 Sie in eine andere Funktion von Rack namens "Rackup" eintauchen, die unten gezeigt wird. Die Verwendung von Rack:: Handler auf diese Weise hat einige Probleme. Erstens ist es nicht sehr konfigurierbar. Alles ist fest im Skript codiert. Zweitens können Sie das Programm nicht beenden, wie Sie feststellen werden, 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
erfordern '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, wird aber normalerweise nicht so verwendet. Rack wird normalerweise mit einem Werkzeug namens verwendet Rackup. Rackup macht mehr oder weniger das, was im unteren Teil des obigen Codes stand, aber auf eine benutzerfreundlichere Art und Weise. Das Rackup wird über die Befehlszeile ausgeführt und erhält ein .ru "Rackup-Datei." Dies ist nur ein Ruby-Skript, das unter anderem eine Anwendung an Rackup weiterleitet.
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
Führen Sie HelloWorld.new aus
Zuerst mussten wir eine kleine Änderung an der vornehmen Hallo Welt Klasse. Rackup führt eine Middleware-App namens aus Rack:: Lint dass die Vernunft die Antworten überprüft. Alle HTTP-Antworten sollten eine haben Inhaltstyp Header, so dass das hinzugefügt wurde. In der letzten Zeile wird dann nur eine Instanz der App erstellt und an die ü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 echter Anwendungscode vorhanden sein.
Wenn Sie den Befehl ausführen Rackup helloworld.ruwird ein Server an Port 9292 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. Geben Sie in der Befehlszeile einfach a ein -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. Hier können Sie also auch Optionen definieren. Wenn Sie auf Port 1337 ausgeführt werden möchten, kann die erste Zeile der Rackup-Datei gelesen werden # \ -p 1337.