Sådan bruges Rack-applikationen i Ruby

I forrige artikel, lærte du, hvad Rack er. Nu er det tid til at begynde at bruge Rack og servere nogle sider.

Hej Verden

Lad os starte med en "Hej Verden" Ansøgning. Denne applikation vil, uanset hvilken type anmodning den har givet, vende tilbage med en statuskode på 200 (som er HTTP-tale for “OK”) og strengen "Hej Verden" som kroppen.

Før du undersøger følgende kode, skal du igen overveje de krav, som enhver Rack-applikation skal opfylde.

En Rack-applikation er ethvert Ruby-objekt, der reagerer på opkaldsmetoden, tager en enkelt hash-parameter og returnerer en matrix, der indeholder responsstatuskoden, HTTP-responsoverskrifter og svarlegemet som en matrix af strygere.
klasse HelloWorld
def call (env)
returner [200, {}, ["Hej verden!"]]
ende
ende

Som du kan se, et objekt af typen Hej Verden vil opfylde alle disse krav. Det gør det på en meget minimal og ikke særlig nyttig måde, men det opfylder alle kravene.

WEBrick

Det er ret simpelt, lad os nu sætte det i WEBrick (den HTTP-server, der følger med)

instagram viewer
Rubin). For at gøre dette bruger vi Rack:: Handler:: WEBrick.run metode, giv det en forekomst af Hej Verden og havnen der skal køres på. En WEBrick-server kører nu, og Rack videresender anmodninger mellem HTTP-serveren og din applikation.

Bemærk, dette er ikke en ideel måde at starte ting på med Rack. Det vises kun her for at få noget i gang, inden du dykker ned i en anden funktion af Rack kaldet "Rackup", som er vist nedenfor. Brug af Rack:: Handler på denne måde har et par problemer. For det første er det ikke meget konfigurerbart. Alt er hårdkodet i scriptet. For det andet, som du vil se, hvis du kører følgende script, kan du ikke dræbe programmet. Det svarer ikke på Ctrl-C. Hvis du kører denne kommando, skal du blot lukke terminalvinduet og åbne en ny.

#! / usr / bin / env ruby
kræver 'rack'
klasse HelloWorld
def call (env)
returner [200, {}, ["Hej verden!"]]
ende
ende
Rack:: Handler:: WEBrick.run (
HelloWorld.new,
: Port => 9000
)

Rackup

Selvom dette er ret let at gøre, er det ikke, hvordan Rack normalt bruges. Rack bruges normalt med et kaldet værktøj rackup. Rackup gør mere eller mindre, hvad der var i det nederste afsnit af koden ovenfor, men på en mere anvendelig måde. Rackup køres fra kommandolinjen og får en .dk “Rackup-fil.” Dette er kun et Ruby-script, der blandt andet føder et program til Rackup.

En meget grundlæggende Rackup-fil til ovenstående ville se sådan ud.

klasse HelloWorld
def call (env)
Vend tilbage [
200,
{'Content-Type' => 'tekst / html'},
["Hej Verden!"]
]
ende
ende
kør HelloWorld.new

Først måtte vi foretage en lille ændring af Hej Verden klasse. Rackup kører en middleware-app kaldet Rack:: fnug at sanity-kontrol svar. Alle HTTP-svar skal have en Indholdstype header, så det blev tilføjet. Derefter opretter den sidste linje bare en forekomst af appen og videresender den til løb metode. Ideelt set skal din ansøgning ikke skrives helt inden for Rackup-filen, denne fil skal kræve din ansøgning ind i den og oprette en forekomst af den på den måde. Rackup-filen er bare "lim". Der skal ikke være nogen reel applikationskode.

Hvis du kører kommandoen rackup helloworld.ru, starter den en server på port 9292. Dette er standard Rackup-porten.

Rackup har nogle mere nyttige funktioner. For det første kan ting som porten ændres på kommandolinjen eller i en speciel linje i scriptet. På kommandolinjen skal du blot indtaste en -p port parameter. For eksempel: rackup -p 1337 helloworld.ru. Fra selve scriptet, hvis den første linje starter med #\, så er det analyseret ligesom kommandolinjen. Så du kan også definere indstillinger her. Hvis du ville køre på port 1337, kunne den første linje i Rackup-filen læses # \ -p 1337.

instagram story viewer