node.js - 将 Meteor 应用程序部署到 Synology armv7 : There is an issue with `node-fibers`

标签 node.js meteor synology node-fibers fiber

我花了几天时间尝试在我的 Synology ds213j(Armv7,512MB RAM)上运行 Meteor 的构建应用程序。

我不断遇到以下错误

## There is an issue with `node-fibers` ##
`/volume1/homes/user/app/bundle/programs/server/node_modules/fibers/bin/linux-arm-57/fibers.node` is missing.

Try running this to fix the issue: /volume1/homes/user/.nvm/versions/node/v8.11.2/bin/node /volume1/homes/user/app/bundle/programs/server/node_modules/fibers/build
Error: /volume1/homes/user/app/bundle/programs/server/node_modules/fibers/bin/linux-arm-57/fibers.node: internal error
    at Object.Module._extensions..node (module.js:681:18)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/volume1/homes/user/app/bundle/programs/server/node_modules/fibers/fibers.js:13:39)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
/volume1/homes/user/app/bundle/programs/server/node_modules/fibers/fibers.js:22
                throw new Error('Missing binary. See message above.');
                ^

Error: Missing binary. See message above.
    at Object.<anonymous> (/volume1/homes/user/app/bundle/programs/server/node_modules/fibers/fibers.js:22:9)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/volume1/homes/user/app/bundle/programs/server/boot.js:1:75)
    at Module._compile (module.js:652:30)

但是, Fibers.node 确实存在!

我之前做了什么:

  • 构建meteor应用meteor build --server-only --architecture os.linux.x86_32

  • 在/program/server 文件夹中 npm install --product

  • npm 安装光纤

我尝试解决的问题:

  • 转到/programs/server/并运行 npm install Fiber(并重新安装)
  • 按照以下说明从源安装 https://www.npmjs.com/package/fibers

  • 我的 Meteor 应用程序使用 Node 8.11.2,但 Synology 唯一可用的 Node 版本是 8.9.4。删除它并手动安装8.11.2

  • 构建一个默认的 meteor 应用程序来检查我的应用程序是否出现问题。

到目前为止没有任何效果,我不知道下一步该做什么。

我怀疑问题是光纤是为 linux-arm-57 构建的,我想我需要 arm-7I? 我可以做些什么来完成这项工作吗?

谢谢!

最佳答案

下面我将描述如何将应用程序正确部署到 ARMv7 设备。通过这样做,我将突出显示可能经常导致错误的重要步骤。我希望通过重复这些步骤可以解决您的问题。

1。构建您的生产应用程序

  • 确保应用启动、运行并且所有测试都在本地通过。
  • 获取当前的 Node 开发版本。请注意,它会有所不同,具体取决于您的项目使用的 meteor 版本。注:meteor guide on custom deployment强调匹配 Node 版本的重要性
$ cd ~/path/to/meteor-project
$ meteor node -v
v8.9.4 # this example uses Meteor 1.6.1 which uses node 8.9.4
  • 使用 build 命令构建您的生产应用(我在此处稍微调整了您的规范)。
$ cd ~/path/to/meteor-project
$ meteor npm install --production
$ meteor build ../build/deployment-test --server-only --architecture os.linux.x86_32

2。准备目标设备的环境

  • Meteor 版本也是 Node.js 应用程序。您的设备将需要 Node.js 的 ARMv7 版本。最简单的方法是使用 install script from nodesource (在新选项卡中打开以查看脚本)。
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
  • 请注意,official node installation guide还指出,“要从 npm 编译和安装 native 插件,您可能还需要安装构建工具”。您将需要这个,因为 opticsbcrypt 就是这样的原生插件。
$ sudo apt-get install -y build-essential
  • 验证您安装的 Node 版本
$ node -v
v8.11.4 # but we need v8.9.4
  • 获取正确版本的 Node (与您的开发版本完全匹配)的最简单方法是使用 npm n 包。
$ sudo npm install -g n
$ sudo n 8.9.4
$ # ... installs target version
$ node -v
v8.9.4 # if this is still the old version just restart the shell
  • 如果您需要这方面的帮助,请阅读本文 github issue thread
  • 最终在目标设备上安装 mongodb >= 2.6(重要!)(本答案未涵盖)。

3。在目标设备上安装您的生产应用

  • 将构建存档复制/移动/上传到目标设备
  • 提取您的部署包
$ cd ~/path/to/deploymentapp
$ tar -xvzf ./meteor-project.tar.gz # extracts all content into a folder named 'bundle'
  • 在目标系统上安装 npm 依赖项
$ cd bundle/programs/server/
$ npm install --production
  • 如果您已复制上述所有步骤,则 npm 软件包(尤其是 native 软件包,例如 Fibers 或 bcrypt)应安装在此处,不会出现任何错误。现在返回 bundle/ 并启动应用程序:
$ cd ../../
$ MONGO_URL=mongodb://yourmongodbcredentials node main.js

我希望通过复制本指南,您能够找到问题的解决方案。


出于 SEO 原因添加:本指南展示了如何在安装了 ARMv7 架构和 Raspbian(32 位)的 Raspberry PI 上部署 Meteor 应用程序。它还可以用作其他 ARMv7 设备的基础,例如 OP 的 Synology。

关于node.js - 将 Meteor 应用程序部署到 Synology armv7 : There is an issue with `node-fibers` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094807/

相关文章:

javascript - socketIO url 中的 "?t="是什么

node.js - 云任务 - 创建任务 - 错误 : No connection established, 代码:14

linux - 如何通过 iPKG 在 Synology 上安装 Postgres

python - 在 Synology 上安装 python 模块 - pip 错误

arrays - 使用 MongoDB 查找最相似的数组

meteor 形态状态未保存

javascript - Meteor 模板异步渲染 - 无法读取 null 的属性 'offsetWidth'

javascript - 在模板助手中连接两个查询的结果

nas - Synology DS213j如何安装Hamachi或LogMeIn服务?

node.js - 迪尔德 : lazy symbol binding failed: Symbol not found: ____chkstk_darwin macOS High sierra 10. 13.6