【问题标题】:Bluemix error: Module version mismatchBluemix 错误:模块版本不匹配
【发布时间】:2016-01-06 02:55:53
【问题描述】:

我正在尝试运行一个使用 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 存储的文档。正如我所说,所有这些都在我的开发机器上运行并正确响应。

这是我的 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 上运行了我的应用程序的早期版本。我当时的节点版本是 Bluemix 在我开始时给我的默认版本,即版本 0.12.x。但是,这个版本不支持箭头功能,我现在大量使用。因此,节点 4.2.x 的碰撞。

谢谢!

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

【问题讨论】:

    标签: node.js ibm-cloud pouchdb


    【解决方案1】:

    我尝试将您在 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 代表英国
    • 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 - 跟踪应用程序日志,正在运行

    cf logs [app-name]
    

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

    6 - 检查在第 5 步生成的输出,以了解有关您的应用程序失败的代码位置和失败模块的详细信息

    【讨论】:

    • 应用部署并运行成功。它响应快速路由器命令,但是对于在调用中的某个时刻使用 PouchDB 的命令,它会引发与上述相同的错误。 [错误:模块版本不匹配。预期 46,得到 14。这通常意味着 leveldown 是使用与现在运行的不同版本的节点构建的。您可以尝试完全删除并重新安装 PouchDB 或 leveldown 来解决。] 我什至将我的节点版本提升到 LTS 4.2.4 并将我的依赖项更新到最新版本。没有运气:(
    【解决方案2】:

    经过大量调试后,与以往一样,答案是首先删除我的 Bluemix 应用程序,然后然后通过构建系统推送新版本。导致错误的 leveldown 预构建 npm 包缓存在某处。我只能通过删除我的应用程序来摆脱这种情况。没什么特别的。

    【讨论】:

    • 接受的正确答案是我的,以供将来参考。您必须再次推送您的应用程序才能正确更新所有模块。
    • 没有。因为当我尝试你的答案时,我得到了同样的错误信息。简单地再次推送应用程序并没有帮助我。我不得不删除,然后再次推送。在撰写本文时,您的答案并未提及从 Bluemix 控制台中完全删除该应用程序。
    • 所以你的答案是不对的,因为再次推送是相同的删除或不提前。如果在创建新版本时删除使其再次起作用,则您更改了某些内容,可能是清单文件中的某些内容,您在 db 切换后第一次错过了更新。
    • 好的,我的朋友。如果你这么说。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-03
    • 2011-03-07
    • 1970-01-01
    相关资源
    最近更新 更多