Ako používať aplikáciu Rack v Ruby

V predchádzajúci článok, naučili ste sa, čo je Rack. Teraz je čas začať používať Rack a zobrazovať niektoré stránky.

Ahoj svet

Najprv začnime „Ahoj svet“. Táto aplikácia sa bez ohľadu na typ žiadosti, ktorej sa žiadosť týka, vráti so stavovým kódom 200 (čo je HTTP-hovoriť pre „OK“) a reťazec „Ahoj svet“ ako telo.

Pred preskúmaním nasledujúceho kódu znova zvážte požiadavky, ktoré musí spĺňať každá aplikácia Rack.

Aplikácia Rack je akýkoľvek objekt Ruby, ktorý reaguje na metódu volania, má jeden parameter hash a vráti pole obsahujúce kód stavu odpovede, hlavičky odpovedí HTTP a telo odpovede ako pole struny.
trieda HelloWorld
def call (env)
návrat [200, {}, ["Ahoj svet!"]]
koniec
koniec

Ako vidíte, objekt tohto typu HelloWorld bude spĺňať všetky tieto požiadavky. Robí to veľmi minimálnym a nie strašne užitočným spôsobom, ale spĺňa všetky požiadavky.

WEBrick

Je to celkom jednoduché, teraz ho pripojte k WEBrick (HTTP server, ktorý je súčasťou dodávky) rubín). Na tento účel používame Rack:: Handler:: WEBrick.run

instagram viewer
metóda, odovzdať inštanciu HelloWorld a port, na ktorom beží. Teraz bude spustený server WEBrick a server Rack bude odosielať požiadavky medzi serverom HTTP a vašou aplikáciou.

Toto nie je ideálny spôsob, ako začať s vecami. Tu sa zobrazuje iba to, aby sa niečo spustilo skôr, ako sa ponoríte do inej funkcie Racku nazvanej „Rackup“, ktorá je zobrazená nižšie. Použitie Rack:: Handler týmto spôsobom má niekoľko problémov. Po prvé, nie je to príliš konfigurovateľné. Všetko je do skriptu pevne zakódované. Po druhé, ako si všimnete, ak spustíte nasledujúci skript, program nemôžete zabiť. Na Ctrl-C nebude reagovať. Ak spustíte tento príkaz, jednoducho zatvorte okno terminálu a otvorte nový.

#! / usr / bin / env ruby
vyžadovať 'stojan'
trieda HelloWorld
def call (env)
návrat [200, {}, ["Ahoj svet!"]]
koniec
koniec
Rack:: Handler:: WEBrick.run (
HelloWorld.new,
: Port => 9000
)

Rackup

Aj keď je to celkom ľahké, Rack sa bežne nepoužíva. Rack sa bežne používa s nástrojom nazývaným rackup. Rackup robí viac alebo menej to, čo bolo v spodnej časti vyššie uvedeného kódu, ale použiteľnejšie. Rackup je spustený z príkazového riadku a má a .ru „Spracovať súbor.“ Toto je iba skript v Ruby, ktorý okrem iného podáva aplikáciu Rackup.

Veľmi základný súbor Rackup pre vyššie uvedené by mohol vyzerať asi takto.

trieda HelloWorld
def call (env)
návrat [
200,
{'Content-Type' => 'text / html'},
["Ahoj svet!"]
]
koniec
koniec
spustiť HelloWorld.new

Najprv sme museli urobiť jednu malú zmenu HelloWorld trieda. Rackup prevádzkuje aplikáciu s názvom middleware Rack:: Lint ktorý rozumne kontroluje odpovede. Všetky odpovede HTTP by mali mať Typ obsahu hlavička, takže to bolo pridané. Potom posledný riadok vytvorí inštanciu aplikácie a odošle ju do beh metóda. V ideálnom prípade by vaša aplikácia nemala byť napísaná úplne do súboru Rackup, tento súbor by mal do nej vyžadovať vašu aplikáciu a vytvoriť tak inštanciu. Súbor Rackup je iba „lepidlo“, nemal by tam byť žiadny skutočný aplikačný kód.

Ak spustíte príkaz rackup helloworld.ru, na port 9292 spustí server. Toto je predvolený port Rackup.

Rackup má niekoľko užitočných funkcií. Najprv je možné veci ako port zmeniť na príkazovom riadku alebo na špeciálnom riadku v skripte. Na príkazovom riadku jednoducho zadajte znak a -p port parameter. Napríklad: rackup -p 1337 helloworld.ru. Zo samotného skriptu, ak prvý riadok začína na #\, potom sa analyzuje rovnako ako príkazový riadok. Aj tu môžete definovať možnosti. Ak ste chceli bežať na porte 1337, mohol by sa prečítať prvý riadok súboru Rackup # \ -p 1337.