U prethodni članak, naučili ste što je Rack. Sada je vrijeme za početak korištenja Rack-a i serviranja nekih stranica.
Pozdrav svijete
Prvo, započnimo s „Pozdrav svijete"Aplikacija. Aplikacija će se, bez obzira na vrstu zahtjeva koji je dan, vraćati sa statusnim kodom od 200 (što HTTP govori za "OK") i nizom "Pozdrav svijete" kao tijelo.
Prije ispitivanja sljedećeg koda, razmislite ponovo o zahtjevima koje mora zadovoljiti bilo koji Rack program.
Rack aplikacija je svaki Ruby objekt koji reagira na metodu poziva, uzme jedan hash parametar i vraća niz koji sadrži kôd statusa odgovora, zaglavlja HTTP odgovora i tijelo odgovora kao niz od žice.
klasa HelloWorld
def call (env)
povratak [200, {}, ["Pozdrav svijetu!"]]
kraj
kraj
Kao što vidite, objekt tipa Pozdrav svijete udovoljit će svim ovim zahtjevima. To čini na vrlo minimalan i ne strašno koristan način, ali udovoljava svim zahtjevima.
WEBrick
To je prilično jednostavno, sada ga uključimo u WEBrick (HTTP poslužitelj koji dolazi) Rubin). Da bismo to učinili, koristimo
Nosač:: Rukovatelj:: WEBrick.run način, proslijedite to instancu Pozdrav svijete i luka na koju će se pokrenuti. Sada se pokreće WEBrick poslužitelj, a Rack će prosljeđivati zahtjeve između HTTP poslužitelja i vaše aplikacije.Napominjemo, ovo nije idealan način za pokretanje stvari s Rackom. Ovdje je prikazano samo da se nešto pokrene prije ronjenja u drugu značajku Rack-a nazvanu "Rackup", koja je prikazana dolje. Korištenje Rack:: Handlera na ovaj način ima nekoliko problema. Prvo, to nije baš konfigurabilno. Sve je tvrdo kodirano u scenariju. Drugo, kako ćete primijetiti ako pokrenete sljedeću skriptu, ne možete ubiti program. Neće odgovoriti na Ctrl-C. Ako pokrenete ovu naredbu, jednostavno zatvorite prozor terminala i otvorite novi.
#! / usr / bin / env rubin
zahtijevati 'stalak'
klasa HelloWorld
def call (env)
povratak [200, {}, ["Pozdrav svijetu!"]]
kraj
kraj
Rack:: Rukovatelj:: WEBrick.run (
HelloWorld.new,
: Luka => 9000
)
Rackup
Iako je to vrlo lako učiniti, Rack se obično ne koristi. Stalak se obično koristi s alatom koji se zove rackup. Rackup čini više ili manje onoga što se nalazilo u donjem dijelu gornjeg koda, ali na više upotrebljiv način. Rackup se pokreće iz naredbenog retka i dano mu je a .ru "Rackup datoteka." Ovo je samo scenarij Ruby koji, između ostalog, hrani aplikaciju na Rackup.
Vrlo osnovna Rackup datoteka za gore će izgledati ovako.
klasa HelloWorld
def call (env)
vratiti [
200,
{'Content-Type' => 'tekst / html'},
["Pozdrav svijete!"]
]
kraj
kraj
pokrenite HelloWorld.new
Prvo smo morali napraviti jednu malu promjenu Pozdrav svijete klase. Rackup pokreće aplikaciju za softver koji se zove Stalak:: Lint da sanitetski provjerava odgovore. Svi HTTP odgovori trebaju imati a Content-Type zaglavlje, tako da je dodano. Zatim, zadnji redak upravo stvara instancu aplikacije i prosljeđuje je u trčanje metoda. U idealnom slučaju, vaša prijava ne bi trebala biti napisana u potpunosti u datoteci Rackup, ova datoteka bi trebala zahtijevati vašu aplikaciju i stvoriti instancu na taj način. Datoteka Rackup je samo "ljepilo", ne treba biti pravi kôd aplikacije.
Ako pokrenete naredbu rackup helloworld.ru, pokrenut će poslužitelj na priključku 9292. Ovo je zadani priključak Rackup.
Rackup ima još korisnih značajki. Prvo, stvari poput porta mogu se mijenjati u naredbenom retku ili u posebnom retku u skriptu. U naredbenoj liniji jednostavno prođite kroz a -p port parametar. Na primjer: rackup -p 1337 helloworld.ru. Iz same skripte, ako započinje prvi redak #\, tada se raščlanjava kao i naredbeni redak. Tako i ovdje možete definirati opcije. Ako se želite pokrenuti na priključku 1337, mogao se pročitati prvi redak Rackup datoteke # \ -p 1337.