w poprzedni artykuł, nauczyłeś się czym jest Rack. Teraz nadszedł czas, aby zacząć korzystać z Rack i wyświetlać niektóre strony.
Witaj świecie
Najpierw zacznijmy od „Witaj świecie" podanie. Ta aplikacja, bez względu na rodzaj wysłanego żądania, zwróci kod stanu 200 (co oznacza „OK” dla HTTP) i ciąg znaków "Witaj świecie" jak ciało.
Przed zbadaniem poniższego kodu ponownie zastanów się, jakie wymagania musi spełniać każda aplikacja do montażu w szafie.
Aplikacja Rack to dowolny obiekt Ruby, który reaguje na metodę wywołania, przyjmuje pojedynczy parametr skrótu i zwraca tablicę zawierającą kod statusu odpowiedzi, nagłówki odpowiedzi HTTP i treść odpowiedzi jako tablicę smyczki.
klasa HelloWorld
def call (env)
return [200, {}, [„Witaj świecie!”]]
koniec
koniec
Jak widać obiekt tego typu Witaj świecie spełni wszystkie te wymagania. Robi to w bardzo minimalny i niezbyt użyteczny sposób, ale spełnia wszystkie wymagania.
WEBrick
To całkiem proste, teraz podłączmy go do WEBrick (dostarczanego serwera HTTP)
Rubin). Aby to zrobić, korzystamy z Rack:: Handler:: WEBrick.run metody, przekaż jej instancję Witaj świecie i port do uruchomienia. Serwer WEBrick będzie teraz działał, a Rack będzie przekazywał żądania między serwerem HTTP a aplikacją.Uwaga: nie jest to idealny sposób na uruchomienie rzeczy w Rack. Pokazano to tylko tutaj, aby uruchomić coś przed zanurzeniem się w innej funkcji Rack o nazwie „Rackup”, która jest pokazana poniżej. Korzystanie z Rack:: Handler w ten sposób ma kilka problemów. Po pierwsze, nie jest bardzo konfigurowalny. Wszystko jest zapisane na stałe w skrypcie. Po drugie, jak zauważysz, jeśli uruchomisz następujący skrypt, nie możesz zabić programu. Nie reaguje na Ctrl-C. Jeśli uruchomisz to polecenie, po prostu zamknij okno terminala i otwórz nowe.
#! / usr / bin / env ruby
wymagają „stojaka”
klasa HelloWorld
def call (env)
return [200, {}, [„Witaj świecie!”]]
koniec
koniec
Rack:: Handler:: WEBrick.run (
HelloWorld.new,
: Port => 9000
)
Kopia zapasowa
Chociaż jest to dość łatwe do zrobienia, nie jest to normalne użycie Rack. Regał jest zwykle używany z narzędziem o nazwie tworzenie kopii zapasowych. Rackup robi mniej więcej to, co było w dolnej części powyższego kodu, ale w bardziej użyteczny sposób. Kopia zapasowa jest uruchamiana z wiersza polecenia i otrzymuje znak .ru „Plik kopii zapasowej”. Jest to tylko skrypt Ruby, który między innymi przekazuje aplikację do programu Backup.
Bardzo prosty plik Rackup dla powyższego wyglądałby mniej więcej tak.
klasa HelloWorld
def call (env)
powrót [
200,
{'Content-Type' => 'text / html'},
["Witaj świecie!"]
]
koniec
koniec
uruchom HelloWorld.new
Najpierw musieliśmy dokonać jednej drobnej zmiany w Witaj świecie klasa. Rackup uruchamia aplikację pośrednią o nazwie Stojak:: Lint to sprawdza rozsądek odpowiedzi. Wszystkie odpowiedzi HTTP powinny mieć Typ zawartości nagłówek, więc został dodany. Następnie ostatni wiersz po prostu tworzy instancję aplikacji i przekazuje ją do biegać metoda. Idealnie byłoby, gdyby twoja aplikacja nie była zapisywana w całości w pliku kopii zapasowej, plik ten powinien wymagać od niej aplikacji i utworzyć w ten sposób instancję. Plik kopii zapasowej jest po prostu „klejem”, nie powinien tam być żaden prawdziwy kod aplikacji.
Jeśli uruchomisz polecenie rackup helloworld.ru, uruchomi serwer na porcie 9292. To jest domyślny port kopii zapasowej.
Rackup ma kilka bardziej przydatnych funkcji. Po pierwsze, rzeczy takie jak port można zmienić w wierszu poleceń lub w specjalnym wierszu skryptu. W wierszu polecenia po prostu wpisz -p port parametr. Na przykład: rackup -p 1337 helloworld.ru. Z samego skryptu, jeśli pierwsza linia zaczyna się od #\, następnie jest analizowany tak jak wiersz poleceń. Możesz tutaj również zdefiniować opcje. Jeśli chcesz uruchomić na porcie 1337, pierwsza linia pliku Rackup może przeczytać # \ -p 1337.