Hoe de rekapplicatie in Ruby te gebruiken

In de vorig artikel, heb je geleerd wat Rack is. Nu is het tijd om Rack te gaan gebruiken en enkele pagina's te presenteren.

Hallo Wereld

Laten we eerst beginnen met een "Hallo Wereld”Applicatie. Deze applicatie zal, ongeacht het type verzoek dat het ontvangt, terugkeren met een statuscode van 200 (dat is HTTP-spraak voor "OK") en de tekenreeks "Hallo Wereld" als het lichaam.

Overweeg, voordat u de volgende code onderzoekt, opnieuw de vereisten waaraan elke Rack-toepassing moet voldoen.

Een Rack-toepassing is elk Ruby-object dat reageert op de aanroepmethode, een enkele hash-parameter en geeft een array terug die de responsstatuscode, HTTP-antwoordheaders en de responsbody bevat als een array van snaren.
klasse HelloWorld
def call (env)
retourneer [200, {}, ["Hallo wereld!"]]
einde
einde

Zoals je kunt zien, een object van het type Hallo Wereld voldoet aan al deze eisen. Het doet dit op een zeer minimale en niet erg nuttige manier, maar het voldoet wel aan alle vereisten.

WEBrick

Dat is vrij eenvoudig, laten we het nu aansluiten op WEBrick (de HTTP-server die wordt meegeleverd)

instagram viewer
Robijn). Hiervoor 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 zal verzoeken doorgeven tussen de HTTP-server en uw applicatie.

Let op, dit is geen ideale manier om dingen met Rack te lanceren. Het wordt hier alleen weergegeven om iets te laten werken voordat je in een andere functie van Rack duikt, genaamd "Rackup", die hieronder wordt weergegeven. Rack:: Handler op deze manier gebruiken heeft een paar problemen. Ten eerste is het niet erg configureerbaar. Alles is hard gecodeerd in het script. Ten tweede, zoals u zult merken als u het volgende script uitvoert, kunt u het programma niet beëindigen. Het reageert niet op Ctrl-C. Als u deze opdracht uitvoert, sluit u gewoon het terminalvenster en opent u een nieuwe.

#! / usr / bin / env robijn
vereisen 'rack'
klasse HelloWorld
def call (env)
retourneer [200, {}, ["Hallo wereld!"]]
einde
einde
Rack:: Handler:: WEBrick.run (
HalloWereld.nieuw,
: Poort => 9000
)

Rekken

Hoewel dit vrij eenvoudig te doen is, is het niet hoe Rack normaal gesproken wordt gebruikt. Rack wordt normaal gesproken gebruikt met een tool genaamd rackup. Rackup doet min of meer wat 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 applicatie naar Rackup stuurt.

Een heel eenvoudig Rackup-bestand voor het bovenstaande zou er ongeveer zo uitzien.

klasse HelloWorld
def call (env)
terugkeer [
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 voert een middleware-app uit genaamd Rek:: Pluizen dat gezond verstand controleert reacties. Alle HTTP-antwoorden moeten een Inhoudstype header, dus dat is toegevoegd. Vervolgens maakt de laatste regel gewoon een exemplaar van de app en geeft deze door aan de rennen methode. Idealiter zou uw applicatie niet volledig in het Rackup-bestand moeten worden geschreven, dit bestand zou uw applicatie erin moeten vereisen en op die manier een instantie ervan moeten maken. Het Rackup-bestand is gewoon "lijm", er mag geen echte applicatiecode zijn.

Als je het commando uitvoert rackup helloworld.rustart het een server op poort 9292. Dit is de standaard Rackup-poort.

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

instagram story viewer