2013-05-03 11 views
39

Czy istnieje sposób na połączenie obu tych pakietów?Forever + Nodemon działa razem

Po prostu chcę mieć to, co najlepsze z obu światów. Uruchamianie serwera automatycznie (i ponowne uruchamianie w przypadku wystąpienia błędu), a także automatyczne aktualizacje, gdy dochodzi do zmiany pliku .js.

Odpowiedz

55

Należy uruchomić coś takiego

forever start -c nodemon app.coffee 
+0

Dzięki. To się udało! –

+5

Powinieneś zobaczyć odpowiedź cfogelberga na to pytanie ze względu na słabość tego rozwiązania. Moja odpowiedź ma również obejście tego problemu. – Jubair

+0

nie działa dla dużej liczby użytkowników, odwiedź ten http://stackoverflow.com/questions/29536649/node-server-crashes-after-few-hours –

10

nie znalazłem sposób na uzyskanie zarówno pakiety działające razem. Próbowałem zrobić @ techniki Toxa, ale kiedy mój node.js aplikacja nie wyrzucił automatycznie uruchomić go ponownie, zamiast wysyłania komunikatu o błędzie do wiecznie zalogować się nodemon wyjątku:

nodemon] app crashed - waiting for file changes before starting... 

Jednak zawsze posiada opcję -w i następujące polecenie jest faktycznie taka sama jak gdyby biegnę nodemon i na zawsze ze sobą:

forever start -w my-app.js 

Wadą forever -w kontra nodemon: forever nie posiada opcję --delay, więc mój serwer zostanie ponownie uruchomiony raz dla każdego plik, który został zmieniony.

39

Toxa było na dobrej drodze, kwestia, że ​​cfogelberg raised jest ważny, ale w celu uniknięcia tego problemu można wykonać następujące czynności:

forever -c "nodemon --exitcrash" app.js 

tego pilnuje nodemon faktycznie wychodzi (a nie daje „aplikacji rozbił "wiadomość", a następnie forever podnosi ją ponownie.

W forever --help ten -c określa polecenie do uruchomienia w przeciwnym razie domyślnie węzeł. Bez -c powoduje błąd, o którym mowa w komentarzach do tej odpowiedzi.

+1

dziękuję, to działa znacznie czystiej – cfogelberg

+1

Nie mogę tego uruchomić, 'Nie można uruchomić na zawsze. script/current_working_directory/nodemon nie istnieje. "Czy istnieje sposób, aby to naprawić? Zainstalowałem nodemon zarówno lokalnie jak i globalnie poprzez npm. –

+0

Nie mogłem tego również użyć, otrzymując błąd, że skrypt 'nodemon' nie istnieje. Tak więc oczywiście próbuje "na zawsze uruchomić nodemon", ale nie mogę wymyślić, jak uruchomić app.js * przez * nodemon. Myślę, że po prostu będę żył z restartem dla każdej zmiany pliku, ale to wydaje się raczej nieefektywne. – AJB

5

Preferuję kombinację tego, co sugerują Toxa i Jubair.

forever start -c nodemon app.coffee --exitcrash 
+0

Nie mam pojęcia dlaczego, ale to jedyne polecenie, które zadziałało dla mnie. Jestem na to nowy i korzystam z ekspresowego, a domyślny serwer znajduje się teraz w 'bin/www'. Tak więc uruchomienie 'forever start -c nodemon bin/www --exitcrash' wreszcie nadało temu działaniu. Dziękuję Ci! –

+0

@akevit Dzieje się tak, ponieważ tak ustawiono serwer. To można dostosować. Możesz go skonfigurować tak, aby uruchamiał twój serwer w najlepszy dla ciebie sposób. – bcbrian

1

Używam forever-service. . .

To właśnie dla mnie zadziałało. Wykonuje następujące czynności: za każdym razem, gdy plik json lub raml w folderze dist/assets aplikacji jest zmodyfikowany, odczekaj 10 sekund, a następnie zrestartuj aplikację węzła (serwer.skrypt js):

$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH" 

Wtedy mogę uruchomić:

$ service raml start|stop|restart|status 

mogę mieć również uruchomić usługę na uruchomienia serwera za pomocą narzędzia chkconfig:

$ chkconfig --add raml 
$ chkconfig raml on 
+1

Aby oglądać zmiany .js, nie potrzebujesz '-e json, raml' :). W ogóle nie potrzebujesz opcji '-e'. nodemon będzie domyślnie oglądać pliki .js. –

2

Jeśli trzeba przejść argumenty:

forever start -c "nodemon --harmony" app.js --exitcrash 
11

Jest to wpis o tym w nodemon FAQ:

Jeśli używasz nodemon z forever (być może w środowisku produkcji), można połączyć dwa razem. W ten sposób, jeśli skrypt ulegnie awarii, na zawsze ponownie uruchomi skrypt, a jeśli zostaną zmienione pliki , nodemon uruchomi ponownie skrypt. Aby uzyskać więcej informacji, zobacz issue 30.

Do tego trzeba dodać następujące na wezwanie do forever osiągnąć:

  • Zastosowanie forever -c nodemon opcja powiedzieć zawsze uruchomić nodemon zamiast node.
  • Dołącz flagę nodemon --exitcrash, aby upewnić się, że nodemon kończy działanie, jeśli skrypt ulegnie awarii (lub nieoczekiwanie wychodzi).
  • Poinformuj na zawsze, aby używać SIGTERM zamiast SIGKILL podczas żądania nodemon do zatrzymania. Gwarantuje to, że nodemon może całkowicie oczyścić obserwowany węzeł w trybie .
  • Opcjonalnie dodaj parametr --uid, dodając unikalną nazwę procesu. W przykładzie identyfikator UID jest ustawiony na foo.

bash forever start --uid foo --killSignal=SIGTERM -c nodemon --exitcrash server.js

Aby to sprawdzić, można zabić proces server.js i zawsze będzie uruchom go ponownie. Jeśli nodemon zostanie uruchomiony ponownie, zostanie on uruchomiony.

Aby zatrzymać proces monitorowany przez wieki nodemon, wystarczy zadzwonić do następujący, używając uid przypisaliśmy powyżej (foo):

bash forever stop foo

ten przestanie zarówno nodemon i proces węzła to było monitorowanie.

pamiętać, że nie polecam korzystania nodemon w środowisku produkcyjnym - ale to dlatego, że nie chcę go uruchomić ponownie bez mojego wyraźnej instrukcji.