Meteor 应用程序无法找到二进制光纤;然而 NPM 构建了一个不同的

Meteor Application Fails to Find Fibers Binary; Yet NPM Built a Different One

我正在将我的 Meteor 包部署到与开发类似的 Ubuntu 18.04 系统。 运行 meteor(启动应用程序)后,出现以下错误:

## There is an issue with `node-fibers` ##
`/opt/docgen/bundle/programs/server/node_modules/fibers/bin/linux-x64-57-glibc/fibers.node` is missing.
Try running this to fix the issue: /usr/bin/node /opt/docgen/bundle/programs/server/node_modules/fibers/build
Error: Cannot find module '/opt/docgen/bundle/programs/server/node_modules/fibers/bin/linux-x64-57-glibc/fibers'
    at Function.Module._resolveFilename (module.js:547:15)
    at Function.Module._load (module.js:474:25)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)

然而,npm install(并调用节点 build.js)为纤程构建了一个不同名称的二进制文件:

ubuntu@ip-xxx-xx-xxx-xx:/opt/docgen/bundle/programs/server/node_modules/fibers$ node build.js 
`linux-x64-72-glibc` exists; testing
Binary is fine; exiting

开发和生产中的节点版本:

ubuntu@ip-xxx-xx-xxx-3xxx-xx-xxx-xx:/opt/docgen/bundle/programs/server/node_modules/fibers$ node -v
v12.16.1

npm 版本:

ubuntu@ip-xxx-xx-xxx-xx:/opt/docgen/bundle/programs/server/node_modules/fibers$ npm -v
6.14.5

文件名二进制文件中的数字是 this table

上的 ABI(应用程序二进制接口)版本又名 NODE_MODULE_VERSION

版本 72 是节点 12,因此它会检查出当您使用节点 12 构建光纤时,您会得到 linux-x64-72-glibc 二进制文件。

我猜你正在使用 Meteor 1.6 - 1.8,它使用 Node 8

节点 8 使用 ABI 57,这正是它所要求的。因此,您想使用 Node 8 构建纤程以获得正确的二进制文件。

请注意,这对于正常运行的 Meteor 安装来说不是必需的,因此我会先重新安装 Meteor,然后再手动重建它的依赖项。

这个问题似乎完全是用 Supervisor 启动应用程序引起的(难道 supervisor 不知道 meteor 的某些方面?)。使用 systemd 启动应用程序不会产生如下错误。

Jun 17 05:06:55 ip-172-31-54-3 systemd[1]: Started AiLanthus Doc App.
Jun 17 05:06:56 ip-172-31-54-3 ailanthusdocs[31873]: Note: you are using a pure-JavaScript implementation of bcrypt.
Jun 17 05:06:56 ip-172-31-54-3 ailanthusdocs[31873]: While this implementation will work correctly, it is known to be
Jun 17 05:06:56 ip-172-31-54-3 ailanthusdocs[31873]: approximately three times slower than the native implementation.
Jun 17 05:06:56 ip-172-31-54-3 ailanthusdocs[31873]: In order to use the native implementation instead, run
Jun 17 05:06:56 ip-172-31-54-3 ailanthusdocs[31873]:   meteor npm install --save bcrypt
Jun 17 05:06:56 ip-172-31-54-3 ailanthusdocs[31873]: in the root directory of your application.
Jun 17 05:08:15 ip-172-31-54-3 ailanthusdocs[31873]: Before create temp file
Jun 17 05:08:15 ip-172-31-54-3 ailanthusdocs[31873]: Source Type: Filed Complaint
Jun 17 05:08:15 ip-172-31-54-3 ailanthusdocs[31873]: Matter ID: Sw9TS7tknvfuY7toB
Jun 17 05:08:17 ip-172-31-54-3 ailanthusdocs[31873]: It's saved!```