OpenShift: ImportError: нет модуля с именем gyp: на картридже NodeJs/Mongo
У меня есть механизм OpenShift с установленным картриджем NodeJS и MongoDB. Я добавил KeystoneJS, и когда я пытаюсь отправить обновленный код, сборка завершается неудачно из-за отсутствия gyp
модуль. Полный стек ошибок ниже.
Кто-нибудь еще сталкивался с отсутствующим гипсовым модулем узла / монго-картриджа?
Спасибо! Nirav
remote: Traceback (most recent call last):
remote: File "/opt/rh/v8314/root/usr/bin/gyp", line 15, in
remote: import gyp
remote: ImportError: No module named gyp
remote: gyp ERR! configure error
remote: gyp ERR! stack Error: gyp failed with exit code: 1
remote: gyp ERR! stack at ChildProcess.onCpExit (/opt/rh/nodejs010/root/usr/lib/node_modules/node-gyp/lib/configure.js:343:16)
remote: gyp ERR! stack at ChildProcess.emit (events.js:98:17)
remote: gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:820:12)
remote: gyp ERR! System Linux 2.6.32-504.16.2.el6.x86_64
remote: gyp ERR! command "node" "/opt/rh/nodejs010/root/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
remote: gyp ERR! cwd /var/lib/openshift/559fa9944382ec4cf1000106/app-root/runtime/repo/node_modules/keystone/node_modules/keystone-utils/node_modules/limax/node_modules/cld
remote: gyp ERR! node -v v0.10.35
remote: gyp ERR! node-gyp -v v1.0.2
remote: gyp ERR! not ok
remote:
remote: npm info cld@2.4.3 Failed to exec install script
remote: npm ERR! EEXIST, open '/var/lib/openshift/559fa9944382ec4cf1000106/.npm/0fe9cfe4-6-npm-mime-db-1-14-0-package-tgz.lock'
remote: File exists: /var/lib/openshift/559fa9944382ec4cf1000106/.npm/0fe9cfe4-6-npm-mime-db-1-14-0-package-tgz.lock
remote: Move it away, and try again.
remote: npm ERR! System Linux 2.6.32-504.16.2.el6.x86_64
remote: npm ERR! command "node" "/opt/rh/nodejs010/root/usr/bin/npm" "install" "-d"
remote: npm ERR! cwd /var/lib/openshift/559fa9944382ec4cf1000106/app-root/runtime/repo
remote: npm ERR! node -v v0.10.35
remote: npm ERR! npm -v 1.4.28
remote: npm ERR! path /var/lib/openshift/559fa9944382ec4cf1000106/.npm/0fe9cfe4-6-npm-mime-db-1-14-0-package-tgz.lock
remote: npm ERR! code EEXIST
remote: npm ERR! errno 47
1 ответ
Эта ошибка стала неожиданно возникать и для меня, хотя раньше это работало. Почему-то Питон gyp
модуль либо отсутствует в картридже, либо не найден. Хотя я не могу сказать, что изменилось, я нашел обходной путь, обновив npm
установка используется для развертывания.
Для этого я добавил два хука действий:
.openshift/action_hooks/pre_build
#!/bin/sh # We need to move the package.json file out of the way in pre_build, so # that the OpenShift git post-receive hook doesn't try and use the old # npm version to install the dependencies. mv ${OPENSHIFT_REPO_DIR}/package.json \ ${OPENSHIFT_TMP_DIR}/${OPENSHIFT_APP_UUID}_package.json
.openshift/action_hooks/build
#!/bin/sh # we moved the package.json file out of the way in pre_build, # so that the OpenShift git post-receive hook doesn't try and use the # old npm version to install the dependencies. Move it back in. mv ${OPENSHIFT_TMP_DIR}/${OPENSHIFT_APP_UUID}_package.json \ ${OPENSHIFT_REPO_DIR}/package.json cd ${OPENSHIFT_REPO_DIR} # We need an updated npm available for node-gyp to work reliable npm install npm # Now install the packages with the new npm version ./node_modules/.bin/npm install
Идея использования альтернативной установки npm таким способом взята с https://github.com/ryanj/nodejs-custom-version-openshift/tree/master/.openshift/action_hooks
Я также пытался использовать переменные среды и настройки $PYTHONPATH
но не имел успеха с таким подходом во время сборки (хотя я заставил его работать над ручной установкой).