TL; DR: Рабочее приложение, клонированное, клон не запускается правильно из push hook (но работает отлично вручную, если я ssh in.) PATH
имеет правильную версию Node, добавленную к ней, но где-то прямо в на последнем шаге неверная версия Node добавляется к PATH
снова.
Здесь правильный путь:
remote: PATH = /var/lib/openshift/.../app-root/data//node-v4.x.x-linux-x64/bin:/var/lib/openshift/.../app-root/runtime/repo/node_modules/.bin:/var/lib/openshift/...//.node_modules/.bin:/opt/rh/nodejs010/root/usr/bin:/bin:/usr/bin:/usr/sbin
Затем неверно сразу же, где-то здесь:
remote: Starting NodeJS cartridge
remote: Tue Aug 22 2017 15:39:10 GMT-0400 (EDT): Starting application 'staging' ...
Итак, какие скрипты и крючки представлены в или до этих двух последних строк? PATH
не просто добавляет строки к себе...
У меня есть работающее приложение OpenShift v2 с версией NodeJS которое будет достаточно новым, чтобы поддерживать обозначение стрелки в массе.
Похоже, что он настроен на Пользовательскую node.js версию на Openshift, потому что скрипты из этого репо (для использования файла маркера) присутствуют в .openshift
.
Я установил второй, используя rhc create --from-app
на основе рабочего, reset репо, а затем повторно развернутый на нем. Второй работал отлично, за исключением последнего шага запуска node
:
remote: npm info ok
remote: NOTE: The .openshift/action_hooks/build hook is not executable, to make it executable:
remote: On Windows run: git update-index --chmod=+x .openshift/action_hooks/build
remote: On Linux/OSX run: chmod +x .openshift/action_hooks/build
remote: Preparing build for deployment
remote: Deployment id is cedf7f51
remote: Activating deployment
remote: NOTE: The .openshift/action_hooks/deploy hook is not executable, to make it executable:
remote: On Windows run: git update-index --chmod=+x .openshift/action_hooks/deploy
remote: On Linux/OSX run: chmod +x .openshift/action_hooks/deploy
remote:
remote: - pre_start_nodejs: Adding Node.js version 4.x.x binaries to path
remote: - PATH set to include custom node version (4.x.x) from
remote: /var/lib/openshift/.../app-root/data//node-v4.x.x-linux-x64/bin
remote: PATH = /var/lib/openshift/.../app-root/data//node-v4.x.x-linux-x64/bin:/var/lib/openshift/.../app-root/runtime/repo/node_modules/.bin:/var/lib/openshift/...//.node_modules/.bin:/opt/rh/nodejs010/root/usr/bin:/bin:/usr/bin:/usr/sbin
remote: Starting NodeJS cartridge
remote: Tue Aug 22 2017 15:39:10 GMT-0400 (EDT): Starting application 'staging' ...
remote: Waiting for application port (8080) become available ...
(Все до этой точки точно так же, как и в рабочем приложении, за исключением имен.)
remote: Application 'staging' failed to start (port 8080 not available)
remote: -------------------------
remote: Git Post-Receive Result: failure
remote: Activation status: failure
remote: Activation failed for the following gears:
remote: ... (Error activating gear: CLIENT_ERROR: Failed to execute: 'control start' for /var/lib/openshift/.../nodejs
remote: #<IO:0x00000001cd42d0>
remote: #<IO:0x00000001cd4258>
remote: )
remote: Deployment completed with status: failure
remote: postreceive failed
rhc env
и rhc app show
показывают, что настройки одинаковы во всех способах, которыми они могут быть.
Я знаю из других вопросов, что вышеприведенная часть "8080" - это красная селедка. Кроме того, если я rhc ssh
и вручную node www.js
, он отлично использует этот порт, и я могу добраться до приложения через браузер.
Итак, я исследовал с помощью rhc tail
. Я вижу, что он не запускается многократно из-за обозначения стрелки жира:
pg.on('error', (err) => {
^
SyntaxError: Unexpected token >
at Module._compile (module.js:439:25)
at Object.Module._extensions..js (module.js:474:10)
...
DEBUG: Program node ./www.js exited with code 8
DEBUG: Starting child process with 'node ./www.js'
Тем не менее, если я rhc ssh
на этом же сервере и запустил node --version
, я получаю более новую версию (ту же версию, что и другой сервер, который вытаскивает ее из файла маркера в каталог .openshift
, который я развернул.)
Я предполагаю, что каким-то образом последний шаг в push-крюке использует Node 0,10, так как это то, что картридж назван в обоих приложениях. Однако, если я проверю, что путь добавлен в PATH
, там действительно существует новая версия Node.
Однако, здесь все становится интересным. Сообщение PATH
, о котором сообщалось выше (где добавлено 4.x.x), больше не является путём к моменту запуска Node. Я изменил www.js
, чтобы просто выплюнуть process.env.PATH
и сравнил их. Последний имеет эти два пути, добавленные к началу!
/opt/rh/nodejs010/root/usr/bin
/opt/rh/v8314/root/usr/bin
Что это значит и как я могу остановить его? Что даже имеет шанс во время этих строк вывода?
remote: PATH = /var/lib/openshift/.../app-root/data//node-v4.x.x-linux-x64/bin:/var/lib/openshift/.../app-root/runtime/repo/node_modules/.bin:/var/lib/openshift/...//.node_modules/.bin:/opt/rh/nodejs010/root/usr/bin:/bin:/usr/bin:/usr/sbin
remote: Starting NodeJS cartridge
remote: Tue Aug 22 2017 15:39:10 GMT-0400 (EDT): Starting application 'staging' ...
(И почему только в моем втором приложении, когда я использовал --from-app
для его создания, и все остальные настройки кажутся равными между двумя?)