Как да използвате приложението Rack в Ruby

В предишна статия, научихте какво е Rack. Сега е време да започнете да използвате Rack и да сервирате няколко страници.

Здравей свят

Първо, нека започнем с „Здравей свят" приложение. Това приложение, независимо от какъв тип заявка е дадено, ще се върне със код на състоянието 200 (което HTTP говори за „ОК“) и низ "Здравей свят" като тялото.

Преди да разгледате следния код, помислете отново за изискванията, на които трябва да отговаря всяко приложение на Rack.

Rack приложение е всеки обект Ruby, който отговаря на метода за повикване, взема един хеш параметър и връща масив, съдържащ код на състоянието на отговора, HTTP заглавки на отговори и тяло на отговора като масив от струни.
клас HelloWorld
def call (env)
връщане [200, {}, ["Здравей свят!"]]
край
край

Както можете да видите, обект от типа Здравей свят ще отговаря на всички тези изисквания. Това го прави по много минимален и не страшно полезен начин, но отговаря на всички изисквания.

WEBrick

Това е доста просто, сега нека го включим в WEBrick (HTTP сървъра, който се доставя)

instagram viewer
рубин). За целта използваме Rack:: Handler:: WEBrick.run метод, предайте го инстанция на Здравей свят и пристанището да работи. Вече ще работи сървър WEBrick и Rack ще изпраща заявки между HTTP сървъра и вашето приложение.

Забележете, това не е идеален начин за стартиране на неща с Rack. Тук е показано само за да стартирате нещо, преди да се потопите в друга функция на Rack, наречена „Rackup“, която е показана по-долу. Използването на Rack:: Handler по този начин има няколко проблема. Първо, това не е много конфигурируемо. Всичко е трудно кодирано в сценария. Второ, както ще забележите, ако стартирате следния скрипт, не можете да убиете програмата. Няма да отговори на Ctrl-C. Ако изпълните тази команда, просто затворете прозореца на терминала и отворете нов.

#! / usr / bin / env рубин
изискват „багажник“
клас HelloWorld
def call (env)
връщане [200, {}, ["Здравей свят!"]]
край
край
Rack:: Handler:: WEBrick.run (
HelloWorld.new,
: Порт => 9000
)

Rackup

Въпреки че това е много лесно да се направи, това не е как се използва Rack обикновено. Rack обикновено се използва с инструмент, наречен rackup. Rackup прави повече или по-малко това, което беше в долната част на кода по-горе, но по по-използваем начин. Rackup се стартира от командния ред и му се дава a .ru „Rackup файл.“ Това е само сценарий на Ruby, който, наред с други неща, захранва приложение към Rackup.

Един много основен Rackup файл за горното би изглеждал така.

клас HelloWorld
def call (env)
връщане [
200,
{'Content-Type' => 'text / html'},
["Здравей свят!"]
]
край
край
стартирайте HelloWorld.new

Първо, трябваше да направим една малка промяна в Здравей свят клас. Rackup работи средно софтуерно приложение, наречено Багажник: Листа че разумните проверки отговори. Всички HTTP отговори трябва да имат a Тип съдържание заглавка, така че това беше добавено. След това последният ред просто създава екземпляр на приложението и го предава на тичам метод. В идеалния случай приложението ви не трябва да бъде писано изцяло във файла Rackup, този файл трябва да изисква вашето приложение в него и да създаде такъв пример по този начин. Файлът Rackup е просто „лепило“, не трябва да има реален код на приложение.

Ако изпълните командата rackup helloworld.ru, ще стартира сървър на порт 9292. Това е по подразбиране Rackup порт.

Rackup има още няколко полезни функции. Първо, неща като порта могат да бъдат променени в командния ред или в специален ред в скрипта. В командния ред просто преминете в a -p порт параметър. Например: rackup -p 1337 helloworld.ru. От самия скрипт, ако първият ред започва с #\, след това се анализира точно като командния ред. Така че можете да определите опции и тук. Ако искате да стартирате на порт 1337, първият ред на файла Rackup може да прочете # \ -p 1337.

instagram story viewer