Node.js Bluemix错误:模块版本不匹配
我正在尝试运行一个node.js应用程序,该应用程序使用PockDB(本地CouchDB实现)。我可以在本地成功运行它,甚至可以上传它并在我的Bluemix实例上构建它。但是,每当我向我的应用程序发送请求时,我都不会收到响应,我在Bluemix控制台中看到以下错误:Node.js Bluemix错误:模块版本不匹配,node.js,ibm-cloud,pouchdb,Node.js,Ibm Cloud,Pouchdb,我正在尝试运行一个node.js应用程序,该应用程序使用PockDB(本地CouchDB实现)。我可以在本地成功运行它,甚至可以上传它并在我的Bluemix实例上构建它。但是,每当我向我的应用程序发送请求时,我都不会收到响应,我在Bluemix控制台中看到以下错误: [错误:模块版本不匹配。预期为46,实际为14。这通常意味着leveldown是使用与当前运行的版本不同的节点版本构建的。您可以尝试完全删除并重新安装PockDB或leveldown以解决此问题。] 我尝试将npm rebuild添
[错误:模块版本不匹配。预期为46,实际为14。这通常意味着leveldown是使用与当前运行的版本不同的节点版本构建的。您可以尝试完全删除并重新安装PockDB或leveldown以解决此问题。]
我尝试将npm rebuild
添加到npm安装
上方的构建管道中,我可以看到它确实进行了一次重建。但是,我仍然得到了前面的错误
关于我的应用程序:它是Slack平台的一个机器人。用户发送命令,然后我的Bluemix应用程序响应。我的Bluemix应用程序有多个存储的文档。正如我所说,所有这些都在我的开发机器上运行并正确响应
以下是我的package.js供参考:
{
"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"
}
}
还有一些额外的历史记录:当我使用MongoDB而不是PockDB时,我在Bluemix上运行了我的应用程序的早期版本。我当时的节点版本是Bluemix在我开始时给我的默认版本,即0.12.x版本。但是,这个版本不支持箭头函数,我现在大量使用它。因此,凹凸到节点4.2.x
谢谢
编辑:经过一番挖掘之后,我发现“leveldown”(PockDB的依赖项)在可用的地方使用了npm预构建。这意味着,如果他们的GitHub上有一个预构建,那么为了方便起见,它将被下载而不是源代码。通过查看日志,我注意到版本
1.4.2
正在通过Bluemix作为预构建版本下载。但是,有一个版本1.4.3
看起来解决了我的问题。因此,新的问题是为什么Bluemix会这样做,我如何纠正它?我尝试在您的package.json中使用与您使用的相同版本(“^5.1.0”),它工作正常,即使使用节点引擎“4.0.x”。
此外,根据CF infrastructure,运行时是在应用程序暂存步骤期间构建的,因此应使用正确的依赖项和引用构建BackDB模块
您是否尝试再次推送应用程序以强制重新启动整个应用程序
如果是,了解发生了什么的第一步是在登台过程中以及在返回此错误消息时获取应用程序日志
因此,在终端上,运行以下命令:
1-将cd放入源目录
2-连接到Bluemix API
cf api https://api.[REGION].bluemix.net
其中[地区]是其中之一
- 欧盟gb代表英国
- 南下
- 澳大利亚悉尼机场
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中生成的输出,以了解有关应用程序在代码中失败的位置和失败模块的详细信息。在大量调试之后,答案仍然是首先删除我的Bluemix应用程序,然后通过构建系统推送新版本。导致错误的leveldown预构建npm包被缓存在某个位置。我只能通过删除我的应用程序来摆脱这个问题。没有什么特别之处。应用程序已成功部署并运行。它响应express router命令,但是对于在调用中的某个点使用PockDB的命令,它抛出与上面相同的错误。[错误:模块版本不匹配。预期为46,实际为14。这通常意味着leveldown是使用与当前运行的版本不同的节点版本构建的。您可以尝试完全删除并重新安装PockDB或leveldown来解决此问题。]我甚至将我的节点版本升级为LTS 4.2.4,并将依赖项更新为最新版本。运气不好:(要接受的正确答案是我的,以备将来参考。你必须再次推送你的应用程序以正确更新所有模块。否。因为当我尝试你的答案时,我收到了相同的错误消息。只是再次推送应用程序对我没有帮助。我必须删除,然后再次推送。在撰写回答时,你没有提到从Bluemix控制台完全删除应用程序。因此,您的答案不正确,因为再次推送与删除相同,或者不是提前推送。如果在创建新版本时删除使其再次工作,则您更改了某些内容,可能是在db切换后第一次未更新的清单文件中的某些内容。好的,我的朋友。我如果你这么说。