Bluemix error: Module version mismatch

Bluemix error: Module version mismatch

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

[Error: Module version mismatch. Expected 46, got 14. This generally implies that leveldown was built with a different version of node than that which is running now. You may try fully removing and reinstalling PouchDB or leveldown to resolve.]

我尝试将 npm rebuild 添加到 npm install 上方的构建管道中,我可以看到它确实进行了重建。但是,我仍然得到之前的错误。

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

这是我的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 而不是 PouchDB 时,我 运行 我在 Bluemix 上的应用程序的先前版本。我当时的node版本是Bluemix在我开始的时候默认给我的,也就是版本0.12.x。然而,这个版本不支持我现在大量使用的箭头函数。因此,节点 4.2.x.

的碰撞

谢谢!

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

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

您是否尝试过再次推送您的应用程序以强制重新启动完整的应用程序?

如果是,了解发生了什么的第一步是在暂存过程中获取应用程序日志,并在返回此错误消息后立即获取。

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

1 - cd 进入您的源目录

2 - 连接到 Bluemix API

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

其中 [REGION] 是

之一
  • eu-gb 英国
  • ng 代表美国南部
  • au-syd 悉尼

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 - 跟踪应用程序日志,运行ning

cf logs [app-name]

并且在不关闭它的情况下发出生成错误消息的请求

6 - 检查第 5 步生成的输出,了解有关您的应用程序在代码中何处出现故障以及故障模块的详细信息

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