Bluemix错误:模块版本不匹配

时间:2015-12-29 12:15:37

标签: node.js ibm-cloud pouchdb

我正在尝试运行使用PouchDB(本地CouchDB实现)的node.js应用程序。我可以在本地成功运行它,甚至上传它并在我的Bluemix实例上构建它。但是,每当我向我的应用程序发送请求时,我都没有收到回复,我在Bluemix控制台中看到以下错误:

npm rebuild

我尝试将npm install添加到{ "name": "XXXXXXXXXXX", "version": "0.x.0", "description": "XXXXXXXXXXXX", "main": "app.js", "scripts": { "start": "node app.js" }, "repository": { "type": "git", "url": "XXXXXXXXXXX" }, "keywords": [ "slack", "bot", "nodejs" ], "author": "xxxxxxxxx", "license": "MIT", "dependencies": { "bluebird": "^3.1.1", "body-parser": "^1.14.2", "cfenv": "^1.0.3", "cheerio": "^0.19.0", "express": "^4.13.3", "pouchdb": "^5.1.0", "request-promise": "^1.0.2" }, "engines": { "node": "^4.2.x", "npm": "^2.14.x" } } 上方的构建管道中,我可以看到它确实在重建。但是,我仍然收到上一个错误。

关于我的应用程序:它是Slack平台的机器人。用户发送命令,然后我的Bluemix应用程序响应。我的Bluemix应用程序有多个PouchDB存储的文档。正如我所说,所有这些都在我的开发机器上运行并正确响应。

这是我的package.js供参考:

1.4.2

还有一些额外的历史记录:当我使用MongoDB而不是PouchDB时,我在Bluemix上运行了我的应用程序的先前版本。我当时的节点版本是Bluemix在我启动时给出的默认值,即版本0.12.x.但是,这个版本并不支持箭头功能,我现在大量使用它。因此,碰到节点4.2.x。

谢谢!

编辑:经过一番挖掘,我发现了' leveldown' (PouchDB的依赖关系)在可用的情况下使用npm prebuild。这意味着如果在他们的GitHub上有一个prebuild,它将被下载而不是源代码,这是方便的。查看日志,我注意到版本1.4.3正在通过Bluemix下载为预构建版本。但是,有一个版本{{1}}可用,它似乎解决了我的'Expected 46, got 14` issue。所以新问题是为什么Bluemix会这样做,我该如何纠正呢?

2 个答案:

答案 0 :(得分:0)

我试图在你的package.json中使用与你使用的相同版本(“^ 5.1.0”)Bluemix,它工作正常,即使使用节点引擎“4.0.x”。 此外,根据CF基础结构,运行时是在应用程序暂存步骤期间构建的,因此应该使用正确的依赖项和引用构建 pouchdb 模块。

您是否曾尝试再次推送应用程序以强制完全恢复应用程序?

如果是,理解发生了什么的第一步是在登台过程中以及一旦返回此错误消息时获取应用程序日志。

因此,在您的终端上,运行以下命令:

1 - cd进入您的源目录

2 - 连接到Bluemix API

cf api https://api.[REGION].bluemix.net

其中[REGION]是

之一
  • eu-gb for United Kingdom
  • ng for US South
  • au-syd for Sydney

3 - 登录Bluemix并选择正确的ORG和SPACE

cf login -u [BLUEMIX USERNAME]

cf target -o [BLUEMIX ORG] -s [BLUEMIX SPACE]

4 - 推送您的应用程序,并在上传后立即运行

cf logs [app-name] --recent > staging_output.txt

5 - 拖动应用程序日志,运行

cf logs [app-name]

并且不关闭它会产生生成错误消息的请求

6 - 检查在步骤#5中生成的输出,以获取有关应用程序失败的代码中的位置以及故障模块的详细信息

答案 1 :(得分:0)

经过大量调试后,答案一如既往地删除我的Bluemix应用程序,然后通过构建系统推送新版本。导致错误的leveldown预构建的npm包被缓存到某个地方。我只能通过删除我的应用程序摆脱这一点。没什么特别的。