2015-07-09 3 views
4

При попытке сборки модулей, которые требуют узла-лавочка, как узел-холст на OpenShift я получаю эту ошибку:Строительные модули с использованием узла-Gyp на OpenShift

> [email protected] install /var/lib/.../repo/node_modules/canvas 
> node-gyp rebuild 

Traceback (most recent call last): 
    File "/opt/rh/v8314/root/usr/bin/gyp", line 15, in <module> 
    import gyp 
ImportError: No module named gyp 
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1 
gyp ERR! stack  at ChildProcess.onCpExit (/opt/rh/nodejs010/root/usr/lib/node_modules/node-gyp/lib/configure.js:343:16) 
gyp ERR! stack  at ChildProcess.emit (events.js:98:17) 
gyp ERR! stack  at Process.ChildProcess._handle.onexit (child_process.js:820:12) 
gyp ERR! System Linux 2.6.32-504.16.2.el6.x86_64 
gyp ERR! command "node" "/opt/rh/nodejs010/root/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" 
gyp ERR! cwd /var/lib/.../repo/node_modules/canvas 
gyp ERR! node -v v0.10.35 
gyp ERR! node-gyp -v v1.0.2 
gyp ERR! not ok 

npm ERR! [email protected] install: `node-gyp rebuild` 
npm ERR! Exit status 1 
npm ERR! 
npm ERR! Failed at the [email protected] install script. 
npm ERR! This is most likely a problem with the canvas package, 
npm ERR! not with npm itself. 
npm ERR! Tell the author that this fails on your system: 
npm ERR!  node-gyp rebuild 
npm ERR! You can get their info via: 
npm ERR!  npm owner ls canvas 
npm ERR! There is likely additional logging output above. 
npm ERR! System Linux 2.6.32-504.16.2.el6.x86_64 
npm ERR! command "node" "/opt/rh/nodejs010/root/usr/bin/npm" "install" "node-canvas-1.2.3" 
npm ERR! cwd /var/lib/.../app-root/runtime/repo 
npm ERR! node -v v0.10.35 
npm ERR! npm -v 1.4.28 
npm ERR! code ELIFECYCLE 
npm ERR! not ok code 0 

Я понимаю, что узел-лавочка импортирует Gyp python, который не найден. Я решил эту проблему несколько недель назад, установив переменную env PYTHONPATH в этот модуль gyp python в моем каталоге node_modules (/var/lib/.../repo/node_modules/node-gyp/gyp/pylib). Таким образом, сборка была успешно завершена, и я мог использовать модуль узла-холста. Теперь я подозреваю, что что-то изменилось в Openshift, и эта техника больше не работает. Несмотря на то, что PYTHONPATH установлен, модуль gyp по-прежнему не может быть найден, когда я устанавливаю модуль на npm. Любая идея, почему модуль gyp не может быть найден, даже если PYTHONPATH настроен на размещение местоположения модуля? Может быть, это игнорируется? Файл лавочки содержит:

import sys 

# TODO(mark): sys.path manipulation is some temporary testing stuff. 
try: 
    import gyp 
except ImportError, e: 
    import os.path 
    sys.path.append(os.path.join(os.path.dirname(sys.argv[0]), 'pylib')) 
    import gyp 

if __name__ == '__main__': 
    sys.exit(gyp.main(sys.argv[1:])) 

Не могу понять причину, почему PYTHONPATH не используется (и не может проверить значение PYTHONPATH в Gyp файл, поскольку это потребует права суперпользователя, которые я не думаю, что у меня есть на OpenShift). Может быть, npm как-то перезагружает env?

+0

Путь питон теперь изменяется в узле-плут, так что вы можете добавить следующее в pre_build крюк .... экспорт PYTHONPATH = "$ {OPENSHIFT_REPO_DIR} node_modules/node-gyp/gyp" –

ответ

1

Я решил, ссылаясь на узел-Gyp напрямую, а не через НПМ установки:

node-gyp configure 
node-gyp build 
node-gyp install 
+0

Запускаете ли вы это в pre_build или в sudo в ssh? –

+0

имеют ту же проблему с резкой библиотекой. не мог ее решить. должен ли я запускать «node-gyp configure», «node-gyp build», «node-gyp install» в определенном пути на сервере? –