So führen Sie eine bereitgestellte Haskell-Webanwendung aus

8

Ich habe jeden Haskell-Deploy-Thread gelesen, den ich hier und mehrere im Internet finden konnte, aber ich bekomme immer noch keins. Wenn ich eine App für meinen Server kompiliert habe und sie starten und ausführen kann, wie gehe ich vor, um das Ding auszuführen? Angenommen, ich verwende eine HTTP-Schnittstelle (nicht FastCGI).

Zum Beispiel verwenden wir mit node.js den Cluster, um die App auf mehreren Prozessorkernen zu starten, und erstellen dann ein init.d-Skript für CentOS, um das Programm auszuführen, zu dämonisieren, eine PID-Datei zu erstellen usw.

Wie mache ich das für eine Haskell App?

    
Sean Clark Hess 11.01.2012, 22:08
quelle

2 Antworten

6

Da Sie nicht erwähnen, welches Framework Sie verwenden, werde ich diese Frage im Allgemeinen beantworten.

Mit Haskell müssen Sie nicht mehrere Instanzen (in einem Cluster) der Webanwendung starten, da die Anwendung normalerweise mehrere Threads verwendet, wenn die Anwendung Parallelität unterstützt. Stattdessen möchten Sie sicherstellen, dass die Anwendung mit den Flags -threaded und -rtsopts kompiliert wird. Wenn Sie die Anwendung ausführen, übergeben Sie die Flags +RTS -N<number of simultaneous threads> . Wenn Sie beispielsweise eine Snap-Webanwendung auf Port 1234 auf einem 8-Core-Computer mit Intel® Hyper-Threading verwenden, würden Sie es mit my-server -p 1234 +RTS -N16 starten, um es mit bis zu 16 Betriebssystem-Threads parallel zu machen.

>

Um die Webanwendung zu dämonisieren, verwenden Sie dasselbe Verfahren wie bei node.js. Sie erstellen ein Init-Skript, das die ausführbare Datei in verschiedenen UNIX-Ausführungsmodi startet, und Bobs Onkel.

Wie bei jeder anderen Webanwendung möchten Sie möglicherweise einen Front-End-Server verwenden, der den Datenverkehr an Ihre Webanwendung umleitet (weshalb Sie Port 80 möglicherweise nicht für Ihre Webanwendungen verwenden möchten). Weitere Informationen dazu finden Sie auf der Web- / Deploy-Seite in HaskellWiki .

    
dflemstr 12.01.2012, 11:42
quelle
2

Die drei großen Haskell-Web-Frameworks (Snap, Yesod und Happstack) können alle mit einem integrierten Webserver ausgeliefert werden. Der traditionelle Ansatz für die Produktionsbereitstellung besteht wahrscheinlich darin, den Betriebssystemmechanismus für die Ausführung eines Prozesses als Daemon zu verwenden in einem Init-Skript oder ähnlichem. Eine leichtere Lösung, die ich verwendet habe, ist ein Skript etwa wie folgt:

%Vor%

Ich führe dieses Skript im Hintergrund aus. Es ist tot einfach, so dass der Shell-Skript-Prozess selbst nie abstürzt. Wenn der Server aus irgendeinem Grund abstürzt, stellt dieses Skript automatisch sicher, dass es sofort neu gestartet wird. Wenn Sie eine neue Version bereitstellen möchten, kopieren Sie sie einfach über die ausführbare Datei my_app und senden Sie einen SIGHUP an den Prozess my_app.

Gehärtete Systemadministratoren könnten bei so etwas erschaudern. Ich werde nicht sagen, dass dies der beste Weg ist, aber ich betreibe seit einigen Jahren eine Produktions-App mit diesem Ansatz und es hat großartig funktioniert. Wie andere bereits erwähnt haben, können Sie dies auch mit einem Front-End-Proxy-Server einrichten, damit Ihre App nicht als root ausgeführt werden muss.

    
mightybyte 12.01.2012 13:39
quelle

Tags und Links