Rack gebruiken

In het vorige artikel heb je geleerd wat Rack is. Nu is het tijd om Rack te gaan gebruiken en enkele pagina's te openen.

Hallo Wereld

Laten we eerst beginnen met een applicatie 'Hallo wereld'. Deze toepassing keert terug, ongeacht het type aanvraag dat wordt gegeven, met een statuscode van 200 (dat is HTTP-speak voor "OK") en de tekenreeks "Hallo Wereld" als het lichaam.

Voordat u de volgende code onderzoekt, moet u nogmaals de vereisten overwegen waaraan een Rack-toepassing moet voldoen.

Een Rack-toepassing is een Ruby-object dat reageert op de aanroepmethode, een enkele hash-parameter gebruikt en een array retourneert die de responsstatuscode, HTTP-antwoordheaders en de body bevat als een reeks strings.
klasse HelloWorld
def call (env)
retour [200, , ["Hallo wereld!"]]
einde
einde

Zoals u ziet, een object van het type Hallo Wereld zal aan al deze vereisten voldoen. Het doet dit op een zeer minimale en niet erg bruikbare manier, maar het voldoet aan alle vereisten.

WEBrick

Dat is vrij eenvoudig, laten we het nu aansluiten op WEBrick (de HTTP-server die bij Ruby wordt geleverd). Om dit te doen, gebruiken we de Rack :: Handler :: WEBrick.run methode, geef het een exemplaar van Hallo Wereld en de poort om op te draaien. Er wordt nu een WEBrick-server uitgevoerd en Rack geeft aanvragen door tussen de HTTP-server en uw toepassing.

Let op, dit is geen ideale manier om dingen te starten met Rack. Het wordt hier alleen getoond om iets op gang te krijgen voordat je in een andere functie van Rack duikt, genaamd "Rackup", die hieronder wordt getoond. Rack :: Handler op deze manier gebruiken heeft enkele problemen. Ten eerste is het niet erg configureerbaar. Alles is hard gecodeerd in het script. Ten tweede, zoals je zult merken als je het volgende script uitvoert, kun je het programma niet doden. Het reageert niet op Ctrl-C. Als u deze opdracht uitvoert, sluit u eenvoudig het terminalvenster en opent u een nieuw.

#! / usr / bin / env ruby
vereisen 'rek'
klasse HelloWorld
def call (env)
retour [200, , ["Hallo wereld!"]]
einde
einde
Rack :: Handler :: WEBrick.run (
HelloWorld.new,
: Poort => 9000
)

Rackup

Hoewel dit vrij eenvoudig is om te doen, is het niet hoe Rack normaal wordt gebruikt. Rack wordt normaal gebruikt met een tool genaamd rackup. Rackup doet min of meer wat er in het onderste gedeelte van de bovenstaande code stond, maar op een meer bruikbare manier. Rackup wordt uitgevoerd vanaf de opdrachtregel en krijgt een .ru "Rackup-bestand." Dit is slechts een Ruby-script dat onder andere een toepassing naar Rackup voedt.

Een heel eenvoudig Rackup-bestand voor het bovenstaande ziet er ongeveer zo uit.

klasse HelloWorld
def call (env)
terug [
200,
'Content-Type' => 'text / html',
["Hallo Wereld!"]
]
einde
einde
voer HelloWorld.new uit

Eerst moesten we een kleine wijziging aanbrengen in de Hallo Wereld klasse. Rackup heeft een middleware-app genaamd Rack :: Lint dat gezond verstand de reacties controleert. Alle HTTP-antwoorden moeten een hebben Content-Type koptekst, dus dat is toegevoegd. Vervolgens maakt de laatste regel slechts een exemplaar van de app en geeft deze door aan de rennen methode. In het ideale geval moet uw toepassing niet volledig in het Rackup-bestand worden geschreven, dit bestand moet uw toepassing erin bevatten en op die manier een instantie maken. Het Rackup-bestand is slechts "lijm", er zou geen echte applicatiecode moeten zijn.

Als u de opdracht uitvoert rackup helloworld.ru, het start een server op poort 9292. Dit is de standaard Rackup-poort.

Rackup heeft nog meer handige functies. Ten eerste kunnen dingen zoals de poort worden gewijzigd op de opdrachtregel of op een speciale regel in het script. Voer op de opdrachtregel gewoon a in -p poort parameter. Bijvoorbeeld: rackup -p 1337 helloworld.ru. Uit het script zelf, als de eerste regel begint met # \, dan wordt het geparseerd net als de opdrachtregel. U kunt hier dus ook opties definiëren. Als je op poort 1337 wilde draaien, kon de eerste regel van het Rackup-bestand lezen # \ -p 1337.