Jak používat aplikaci Rack v Ruby

V předchozí článek, naučili jste se, co je Rack. Nyní je čas začít používat Rack a zobrazovat některé stránky.

Ahoj světe

Nejprve začněme „Ahoj světe" aplikace. Tato aplikace se bez ohledu na typ požadavku vrátí se stavovým kódem 200 (což je HTTP-mluví pro „OK“) a řetězec "Ahoj světe" jako tělo.

Před prozkoumáním následujícího kódu znovu zvažte požadavky, které musí každá aplikace Rack splňovat.

Racková aplikace je jakýkoli objekt Ruby, který reaguje na metodu volání, vezme jeden hash parametr a vrátí pole obsahující kód stavu odpovědi, záhlaví odpovědí HTTP a tělo odpovědi jako pole řetězce.
třída HelloWorld
def volání (env)
návrat [200, {}, ["Ahoj svět!"]]
konec
konec

Jak vidíte, objekt typu Ahoj světe splní všechny tyto požadavky. Dělá to velmi minimálním a ne strašně užitečným způsobem, ale splňuje všechny požadavky.

WEBrick

To je docela jednoduché, připojme se nyní k WEBricku (HTTP serveru, který je součástí dodávky) Rubín). K tomu používáme Rack:: Handler:: WEBrick.run metodu, předejte ji instanci

instagram viewer
Ahoj světe a port, na kterém běží. Nyní bude spuštěn server WEBrick a Rack bude předávat požadavky mezi serverem HTTP a vaší aplikací.

Toto není ideální způsob, jak zahájit práci s Rackem. Je zde ukázáno, že něco běží, než se potápíte do jiné funkce Racku zvané „Rackup“, která je zobrazena níže. Použití Rack:: Handler tímto způsobem má několik problémů. Za prvé, není to příliš konfigurovatelné. Do skriptu je vše pevně zakódováno. Za druhé, jak si všimnete, pokud spustíte následující skript, nemůžete program zabít. Na Ctrl-C nebude reagovat. Pokud spustíte tento příkaz, jednoduše zavřete okno terminálu a otevřete nový.

#! / usr / bin / env ruby
vyžadují 'stojan'
třída HelloWorld
def volání (env)
návrat [200, {}, ["Ahoj svět!"]]
konec
konec
Rack:: Handler:: WEBrick.run (
HelloWorld.new,
: Port => 9000
)

Vybavit se

I když je to docela snadné, není to, jak se Rack běžně používá. Rack se běžně používá s názvem nástroje vybavit se. Rackup dělá víceméně to, co bylo ve spodní části kódu výše, ale použitelnějším způsobem. Rackup je spuštěn z příkazového řádku a je označen .ru "Souhrnný soubor." Toto je pouze Ruby skript, který mimo jiné podává aplikaci Rackupu.

Velmi základní Rackup soubor pro výše uvedené by vypadal něco takového.

třída HelloWorld
def volání (env)
vrátit se [
200,
{'Content-Type' => 'text / html'},
["Ahoj světe!"]
]
konec
konec
spusťte HelloWorld.new

Nejprve jsme museli udělat jednu drobnou změnu Ahoj světe třída. Rackup provozuje middlewarovou aplikaci s názvem Rack:: Lint že zdravý rozum kontroluje odpovědi. Všechny odpovědi HTTP by měly mít Typ obsahu záhlaví, takže to bylo přidáno. Poslední řádek pak vytvoří instanci aplikace a předá ji běh metoda. V ideálním případě by vaše aplikace neměla být zapsána zcela do souboru Rackup, tento soubor by měl vyžadovat vaši aplikaci a vytvořit tak instanci. Soubor Rackup je pouze „lepidlo“, neměl by tam být žádný skutečný kód aplikace.

Pokud spustíte příkaz rackup helloworld.ru, spustí port na portu 9292. Toto je výchozí port Rackup.

Rackup má několik užitečnějších funkcí. Za prvé, věci jako port lze změnit na příkazovém řádku nebo na speciální řádce ve skriptu. Na příkazovém řádku jednoduše zadejte a -p port parametr. Například: rackup -p 1337 helloworld.ru. Ze samotného skriptu, pokud začíná první řádek #\, pak je analyzován stejně jako příkazový řádek. Zde můžete také definovat možnosti. Pokud jste chtěli spustit na portu 1337, mohl by se přečíst první řádek souboru Rackup # \ -p 1337.