2012-01-11 14 views
8

Czytałem każdy wątek wdrażania Haskell, który mogłem znaleźć tutaj i kilka w szerszej sieci, ale nadal nie dostałem jednej rzeczy. Jeśli skompilowałem aplikację na mój serwer i mogę ją uruchomić i uruchomić, jak mam ją uruchomić? Załóżmy, że używam interfejsu HTTP (nie FastCGI).Jak uruchomić wdrożoną aplikację internetową Haskell

Na przykład w węźle node.js używamy klastra, aby uruchomić aplikację na kilku rdzeniach procesorów, a następnie utworzyć skrypt init.d dla centOS, aby uruchomić działanie, daemonize, mieć plik pid itp.

Jak to zrobić dla aplikacji Haskell?

+1

Czy używasz określonego frameworka? (Happstack/Yesod/etc?) – alternative

+0

Tak. :) Interesuje mnie zarówno Happstack, jak i Snap. Gram z Hackem 2, ale używa on serwera Snapa. –

Odpowiedz

6

Ponieważ nie wspomnisz, z której struktury korzystasz, po prostu odpowiem na to pytanie w ogólności.

Dzięki Haskell nie trzeba uruchamiać wielu wystąpień (w klastrze) aplikacji internetowej, ponieważ jeśli aplikacja obsługuje współbieżność, zwykle korzysta z wielu wątków wewnętrznie. Zamiast tego, chcesz się upewnić, że aplikacja jest skompilowana z flagami -threaded i -rtsopts. Następnie, po uruchomieniu aplikacji, przekazujesz flagi +RTS -N<number of simultaneous threads>. Jeśli użyjesz aplikacji internetowej Snap działającej na porcie 1234 na 8-rdzeniowym komputerze z Intel® Hyper-Threading, na przykład uruchomisz go z my-server -p 1234 +RTS -N16, aby uzyskać równoległość do maksymalnie 16 wątków systemu operacyjnego.

Aby zemonizować aplikację internetową, należy wykonać tę samą procedurę, co w przypadku pliku node.js. Tworzysz skrypt init, który uruchamia plik wykonywalny w różnych trybach uruchamiania w systemie UNIX, a Bob jest twoim wujkiem.

Podobnie jak w przypadku każdej innej aplikacji internetowej, możesz użyć serwera front end, który przekierowuje ruch do Twojej aplikacji internetowej (dlatego możesz nie chcieć używać portu 80 w swoich aplikacjach internetowych). Aby uzyskać szczegółowe informacje, jak to zrobić, odwiedź stronę the Web/Deploy page on HaskellWiki.

+0

Odpowiedziałeś dokładnie na pytanie, które próbowałem wymyślić! Ale jak uruchomić aplikację Snap na serwerze, jeśli nie chcesz używać serwera front-end (nie wiem, dlaczego byłbym potrzebny)? Po prostu jako, powiedzmy, usługa Ubuntu, która uruchamia "twoja_nazwa_aplikacji -p 80 + RS -N16" ??? Mam nadzieję, że odpowiadasz, próbowałem to przez chwilę zrozumieć ... Dzięki! – drozzy

2

Trzy duże struktury sieciowe Haskell (Snap, Yesod i Happstack) mają możliwość dostarczania z wbudowanym serwerem sieciowym. Tradycyjne podejście do wdrażania produkcji polega prawdopodobnie na użyciu mechanizmu systemu operacyjnego do uruchamiania procesu jako daemon w skrypcie init lub podobnym. Jednym z lżejszych rozwiązań, których użyłem, jest skrypt podobny do następującego:

while true; do 
    echo Restarting at `date` | tee -a stdout.log stderr.log > /dev/null 
    ./my_app 80 >> stdout.log 2>> stderr.log 
done 

Uruchomę ten skrypt w tle. To proste, więc sam proces skryptu powłoki nigdy się nie zawiesza. Jeśli serwer ulegnie awarii z jakiegokolwiek powodu, ten skrypt automatycznie zapewni, że natychmiast zostanie ponownie uruchomiony. Jeśli chcesz zainstalować nową wersję, po prostu skopiuj ją do pliku wykonywalnego my_app i wyślij SIGHUP do procesu my_app.

Uszkodzone głośniki mogą się tam wzdrygnąć. Nie powiem, że jest to najlepszy sposób na zrobienie tego, ale od kilku lat pracuję nad aplikacją produkcyjną i działa to świetnie. Jak wspominali inni, możesz również ustawić to za pomocą frontowego serwera proxy, aby Twoja aplikacja nie musiała działać jako root.

+0

To podejście sprawia, że ​​trudno jest robić rzeczy, które wielu sysadminów chce zrobić z ich demonami, np. Sprawdzając status procesu (czego nie można zrobić za pomocą 'ps aux | grep ...'lub' pgrep', gdy masz wiele demonów o takich samych/podobnych nazwach), czy rzeczywiste przeładowania config bez specjalnych sygnałów, itp. – dflemstr

+0

Oczywiście. To lżejsze rozwiązanie, które sprawdziło się dobrze w sytuacjach, w których podejście, jakie może podjąć sysadmin kariery, wydawało się trochę ciężkie. – mightybyte

Powiązane problemy