node.js - OpenShift : ImportError: No module named gyp: on NodeJs/Mongo cartridge

标签 node.js mongodb openshift node-gyp openshift-cartridge

我有一个安装了 NodeJSMongoDB 盒的 OpenShift 设备。我添加了 KeystoneJS ,当我尝试推送更新的代码时,由于缺少 gyp 模块,构建失败。下面是完整的错误堆栈。

还有其他人遇到过 Node/mongo 盒丢失 gyp 模块的情况吗?

谢谢! 尼拉夫

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

最佳答案

这个错误也突然开始发生在我身上,尽管它以前曾经有效过。由于某种原因,Python gyp 模块在卡带中不可用或无法找到。虽然我不知道发生了什么变化,但我通过升级用于部署的 npm 安装找到了解决方法。

为此,我添加了两个 Action Hook :

  1. .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
    
  2. .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,但在构建过程中该方法没有成功(尽管我让它在手动安装上工作)。

关于node.js - OpenShift : ImportError: No module named gyp: on NodeJs/Mongo cartridge,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31343613/

相关文章:

node.js - 如何通过无服务器框架在 CloudWatch 事件中定义多个目标

MongoDB 搜索仅返回特定字段

node.js - Node 应用程序无法连接到 MongoDB,但仅在 Docker 中

git - 从 RHC 中删除 Openshift 服务器

java - OpenShift 上的 Web 套接字断开连接(使用 WildFly 8.2.1)

node.js - AbortError : Ready check failed: Redis connection lost and command aborted. 可能已经处理完毕

node.js - 如何将 Google Compute Engine 配置为对 nodejs 服务器使用 HTTPS?

node.js - AWS Lambda 上 NodeJS EventEmitter 中的异步函数

ruby - Mongoid 还是 MongoMapper?

javascript - OpenShift 找不到 css 和 js 文件