使用機(jī)架

在上一篇文章中,您了解了機(jī)架是什么?,F(xiàn)在,是時(shí)候開(kāi)始使用機(jī)架并提供一些頁(yè)面了。

Hello World

首先,讓我們從“Hello world”應(yīng)用程序開(kāi)始。無(wú)論給出何種類(lèi)型的請(qǐng)求,此應(yīng)用程序都將返回狀態(tài)代碼200(HTTP為“OK”),字符串“Hello world”作為正文。

在檢查以下代碼之前,請(qǐng)?jiān)俅慰紤]任何機(jī)架應(yīng)用程序必須滿(mǎn)足的要求。

Rack應(yīng)用程序是響應(yīng)調(diào)用方法的任何Ruby對(duì)象,采用單個(gè)哈希參數(shù)并返回包含響應(yīng)狀態(tài)代碼,HTTP響應(yīng)標(biāo)題和響應(yīng)體作為字符串?dāng)?shù)組的數(shù)組。

類(lèi)HelloWorld
def call(env)
返回[200,{},["Hello world!"]]
end
end

正如您所看到的,HelloWorld類(lèi)型的對(duì)象將滿(mǎn)足所有這些要求。它以一種非常微小而不是非常有用的方式這樣做,但它確實(shí)滿(mǎn)足了所有要求。

WEBrick

這很簡(jiǎn)單,現(xiàn)在讓我們將其插入WEBrick(紅寶石附帶的HTTP服務(wù)器)。為此,我們使用Rack::Handler::WEBrick.run方法,將其傳遞給HelloWorld的實(shí)例和要運(yùn)行的端口。WEBrick服務(wù)器現(xiàn)在將運(yùn)行,機(jī)架將在HTTP服務(wù)器和您的應(yīng)用程序之間傳遞請(qǐng)求胃病小知識(shí)

請(qǐng)注意,這不是推出機(jī)架產(chǎn)品的理想方式。它'僅在此處顯示,以便在潛入另一個(gè)名為"Rackup,"如下所示的機(jī)架功能之前運(yùn)行某些東西。以這種方式使用Rack::Handler有一些問(wèn)題。首先,它不是很可配置的。一切都被硬編碼到腳本中。其次,正如您將注意到的那樣,如果您運(yùn)行以下腳本,則無(wú)法殺死該程序。它不會(huì)響應(yīng)Ctrl-C。如果運(yùn)行此命令,只需關(guān)閉終端風(fēng)ow并打開(kāi)一個(gè)新的。

#!/usr/bin/env ruby
require'rack'
class HelloWorld
def call(env)
return[200,{},["Hello world!"]]
結(jié)束
結(jié)束
機(jī)架::處理器::WEBrick.run(
HelloWorld.new,
:Port=>9000

Rackup

雖然這很容易做到,但通常不使用機(jī)架。機(jī)架通常與稱(chēng)為rackup的工具一起使用。Rackup或多或少地做了上面代碼底部的內(nèi)容,但是以更可用的方式。Rackup從命令行運(yùn)行,并給出.ru“Rackup文件”。這只是一個(gè)紅寶石腳本,除其他外,它將應(yīng)用程序提供給Rackup。

上面非常基本的Rackup文件看起來(lái)像這樣。

類(lèi)HelloWorld
def call(env)
返回[
200,
{'內(nèi)容類(lèi)型'=>'text/html'},
[&##34;Hello world!"]
]
end
end
runHelloWorld.new

首先,我們必須對(duì)HelloWorld類(lèi)進(jìn)行一個(gè)微小的更改。Rackup正在運(yùn)行名為Rack::Lint的中間件應(yīng)用程序,該應(yīng)用程序會(huì)檢查響應(yīng)是否正確。所有HTTP響應(yīng)都應(yīng)該有一個(gè)內(nèi)容類(lèi)型標(biāo)題,以便添加。然后,最后一行只是創(chuàng)建應(yīng)用程序的一個(gè)實(shí)例,并將其傳遞給run方法。理想情況下,您的應(yīng)用程序不應(yīng)完全寫(xiě)入Rackup文件中,此文件應(yīng)要求您的應(yīng)用程序進(jìn)入其中并以這種方式創(chuàng)建實(shí)例。Rackup文件只是“膠水”,不應(yīng)該有真正的應(yīng)用程序代碼。

如果你運(yùn)行命令109 rackuphelloworld.ru,它將在端口9292上啟動(dòng)服務(wù)器。這是默認(rèn)的Rackup端口。

Rackup有一些更有用的功能。首先,可以在命令行或腳本中的特殊行中更改端口等內(nèi)容。在命令行上,只需輸入-p port參數(shù)即可。例如:rackup-p 1337 helloworld.ru。從腳本本身來(lái)看,如果第一行以#\開(kāi)頭,那么它的解析就像命令行一樣。所以你也可以在這里定義選項(xiàng)。如果您想在端口1337上運(yùn)行,Rackup文件的第一行可以讀取##\-p 1337。

教育資源網(wǎng)_1