Нужно ли использовать Forever.js на OpenShift?

Я развернул свое первое приложение Node.js на уровне бесплатного пользования OpenShift, и оно отлично работает.

Будет ли OpenShift автоматически перезапускать мое приложение Node в случае сбоя или мне придется настраивать Forever.js? Я попытался настроить его, и это не сработало. После запуска node_modules/forever/bin/forever start app.js (рабочий каталог был app-root/repo, с локальной копией forever) я получил этот вывод:

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)

Итак, OpenShift управляет состоянием моего приложения за меня, или мне нужно, чтобы Forever работал? Если да, то какие идеи относительно ошибки, которую я получил?


person Jeff    schedule 24.06.2014    source источник
comment
Прекрасный вопрос, именно то, что мне нужно знать, переходя от Modulus (который также перезапускает ваше приложение). Modulus также имеет возможность отправить вам электронное письмо, кто-нибудь знает, может ли OpenShift это сделать? (Не похоже, что у node-supervisor есть такая возможность)   -  person user949300    schedule 26.12.2014


Ответы (2)


Да, OpenShift автоматически перезапускает приложение Node при сбое. OpenShift не использует forever.js, но использует node-supervisor. Вы можете проверить это, потребовав чего-то, чего не существует. Исправьте это быстро, потому что журнал может быстро расти при перезапуске приложения. Вот журнал в nodejs.log на OpenShift, который показывает, что он работает над узлом-супервизором:

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.
person Ben    schedule 25.06.2014
comment
Интересно, а где этот журнал? И использует ли он для этого main или scripts.start? - person Jeff; 25.06.2014
comment
ssh в систему, используя командную строку с сайта openshift под вашим приложением. Потом cd app-root/logs, там все логи. Я уверен, что они используют сценарий для развертывания, поскольку перед запуском приложения запускается/устанавливается/настраивается так много вещей... Я действительно не копался в нем, чтобы увидеть, какой это сценарий. - person Ben; 25.06.2014

В настоящее время поведение OpenShift по умолчанию включает использование supervisor для запуска, просмотра и перезапуска ваших приложений nodejs.

Вот краткий обзор различных параметров инициализации для nodejs:

  1. Если ваше приложение содержит допустимый файл package.json с записью main (содержащей имя вашего серверного скрипта), затем OpenShift инициализирует ваше приложение, используя supervisor для запуска этого скрипта.
  2. Если ваше приложение включает файл маркера force_npm_deploy (пустой файл в .openshift/markers/use_npm) - тогда OpenShift просто запустит npm start. Это запускает все, что определено в объекте scripts.start вашего файла package.json.
  3. Если ничего не помогает, OpenShift попытается запустить server.js, используя supervisor (в качестве запасного варианта).

Некоторые дополнительные примечания доступны здесь: https://www.openshift.com/blogs/10-reasons-openshift-is-the-best-place-to-host-your-nodejs-app#npm

person ʀɣαɳĵ    schedule 25.06.2014
comment
Спасибо, это тоже было полезно. :) - person Jeff; 26.06.2014