2014-06-24 8 views
8

Zainstalowałem moją pierwszą aplikację Node.js na wolnym poziomie OpenShift i działa świetnie.Czy konieczne jest użycie Forever.js na OpenShift?

Czy OpenShift automatycznie zrestartuje moją aplikację węzła, gdy ulegnie awarii, czy muszę skonfigurować Forever.js? Próbowałem go skonfigurować i nie zadziałało. Po uruchomieniu node_modules/forever/bin/forever start app.js (dir roboczy app-root/repo z lokalnej kopii forever) Mam ten wynik:

warn: --minUptime not set. Defaulting to: 1000ms 
warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms 
info: Forever processing file: app.js 

fs.js:240 
    return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); 
       ^
Error: ENOENT, no such file or directory '/var/lib/openshift/5397416f5004466c0b000080/.forever/VQMF.log' 
    at Object.openSync (fs.js:240:18) 
    at Object.startDaemon (/var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever.js:406:14) 
    at /var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever/cli.js:258:13 
    at /var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever/cli.js:145:5 
    at Object.oncomplete (/var/lib/openshift/5397416f5004466c0b000080/app-root/runtime/repo/node_modules/forever/lib/forever.js:358:11) 

Więc, czy OpenShift zarządzać aplikacji zdrowia dla mnie, albo będę musiał dostać Zawsze działa? Jeśli tak, to jaki mam pomysł na błąd?

+0

Doskonałe pytanie, co dokładnie muszę wiedzieć, przesuwając nad od Modulus (który ponownie uruchamia również aplikację). Modulus ma również opcję wysłania e-maila, czy ktoś wie, czy OpenShift może to zrobić? (Nie wygląda na to, że węzeł-przełożony ma tę opcję) – user949300

Odpowiedz

6

Tak, OpenShift automatycznie uruchamia ponownie aplikację węzła po awarii. OpenShift nie używa pliku forever.js, ale korzysta z niego node-supervisor. Twój może go przetestować, wymagając czegoś, co nie istnieje. Napraw to szybko, ponieważ dziennik może szybko się zrestartować. Oto dziennik w nodejs.log na OpenShift co pokazuje, że jest uruchomiony węzeł-Supervisor:

DEBUG: Running node-supervisor with 
DEBUG: program 'server.js' 
DEBUG: --watch '/var/lib/openshift/53a9e06ae0b8cde26300008e/app-root/data/.nodewatch' 
DEBUG: --ignore 'undefined' 
DEBUG: --extensions 'node|js|coffee' 
DEBUG: --exec 'node' 
DEBUG: Starting child process with 'node server.js' 
DEBUG: Watching directory '/var/lib/openshift/53a9e06ae0b8cde26300008e/app-root/data/.nodewatch' for changes. 
+0

Interesujące, gdzie jest ten log? I czy używa do tego 'main' lub' scripts.start'? – Jeff

+0

ssh do systemu za pomocą łańcucha poleceń z witryny openshift w Twojej aplikacji. Następnie cd-root-log/logs, wszystkie logi tam są. Jestem pewien, że używają skryptu do wdrożenia, ponieważ przed uruchomieniem aplikacji zostało wiele rzeczy rozpoczętych/zainstalowanych/skonfigurowanych ... Nie zagłębiłem się w to, by sprawdzić, który to skrypt. – Ben

+0

Niesamowite, dzięki! – Jeff

5

Obecnie domyślne zachowanie OpenShift za polega na wykorzystaniu supervisor zacząć, zegarek i ponownie uruchomić aplikacje nodejs.

Oto krótki opis poszczególnych opcji startowych dla nodejs:

  1. Jeśli aplikacja zawiera prawidłowy plik package.json z main wpisu (containing the name of your server script), następnie OpenShift zainicjuje swoją aplikację za pomocą supervisor zacząć ten skrypt.
  2. Jeśli twoja aplikacja zawiera force_npm_deploy marker file (pusty plik w .openshift/markers/use_npm) - to OpenShift będzie po prostu uruchamiać npm start. Działa to, co jest zdefiniowane w jednostce zbioru .
  3. Jeśli wszystko inne zawiedzie, OpenShift spróbuje uruchomić server.js przy użyciu supervisor (jako opcję awaryjną).

kilka dodatkowych notatek są dostępne tutaj: https://www.openshift.com/blogs/10-reasons-openshift-is-the-best-place-to-host-your-nodejs-app#npm

+0

Dzięki, to też było pomocne. :) – Jeff