【问题标题】:Meteor fails after upgrading node升级节点后 Meteor 失败
【发布时间】:2012-07-01 06:23:04
【问题描述】:

将节点升级到 v0.8.1 后,捆绑的 Meteor 应用现在会抛出错误:

node: symbol lookup error: ~/bundle/server/node_modules/fibers/src/fibers.node:
undefined symbol: _ZNK2v85Value11IsUndefinedEv

升级节点的正确方法是什么? Meteor 与 v0.8.1 兼容吗?

【问题讨论】:

  • 升级 Node 后,是否使用 NPM 重新安装了依赖项? Fibers 有一个已编译的部分,因此需要重新编译。如果您的模块使用npm shrinkwrap 进行收缩包装,您可以只使用rm -rf node_modules 然后npm install。
  • 是的,升级节点后,我运行 npm update 来获取最新版本的节点模块,如光纤。在测试模式下直接从目录运行应用程序时效果很好。但是使用“流星包”在生产中部署应用程序失败了。 Meteor 捆绑了旧版本的 Fiber,该版本不适用于当前稳定版本的 node。我通过用本地安装的版本替换捆绑的 fiber.node 解决了这个问题。

标签: node.js meteor


【解决方案1】:

我能够通过替换使其工作

~/bundle/server/node_modules/fibers/src/fibers.node

与

~/.npm/fibers/0.6.8/package/bin/linux-x64-v8-3.11/fibers.node

什么是正确的升级方式?

【讨论】:

  • 这似乎是最新节点和旧版本光纤之间的不兼容,正确的升级方法是通过 Meteor 升级(我相信在升级时会通知您)。当然,如果你在 Meteor 之外使用 Node.js,那就不一定了。在这种情况下,您可以绕过生成开发包并修复与最新光纤的不兼容性,但这可能不可行,因为如果您不打算为 Meteor 核心进行开发,那么工作量太大。总而言之,Meteor 更喜欢“稳定”(wrt 依赖)而不是“最新”......
  • 可能是在未来的第一个版本中,开发将影响依赖项的版本。不过既然刚刚发布,就不用着急了……
  • 我使用的是最新的 Meteor,0.3.7,但是 Meteor 提供的 Fiber 不适用于当前稳定版本的 node。管理依赖对 Meteor 来说是个问题,因为 Meteor 使用已安装的 node 版本,但提供了自己的 node 模块版本。似乎 Meteor 可以提供与捆绑模块匹配的节点版本,或者停止将模块与应用程序捆绑在一起。否则会有依赖地狱。
  • Meteor 确实与node 捆绑在一起。但是,您的系统选择系统node 而不是流星node。请注意,您还可以指定需要从何处加载模块,即通过设置NODE_PATH 环境变量。您可以看到 node 被打包在 admin/generate-dev-bundle.sh 中,它在运行 meteor 时被解包,并使用 admin/build-release.sh 打包发布。
  • 我正在使用 'meteor bundle' 部署到生产机器。 Meteor 在这个包中不包含节点二进制文件(也不应该)。当您在使用与开发机器上相同版本节点的生产机器上部署捆绑包时,捆绑包可能无法工作。这是个问题。在捆绑应用程序以进行生产部署时,获得一些有关升级节点的正确方法的指导会很有帮助,以避免出现依赖性问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-14
  • 2020-06-30
  • 2020-08-25
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多