将 Meteor 应用程序部署到 Synology armv7:“node-fibers”存在问题

Posted

技术标签:

【中文标题】将 Meteor 应用程序部署到 Synology armv7:“node-fibers”存在问题【英文标题】:Deploy Meteor app to Synology armv7: There is an issue with `node-fibers` 【发布时间】:2019-02-05 06:25:24 【问题描述】:

我花了几天时间尝试在我的 Synology ds213j(Armv7,512MB 内存)上运行来自 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 build --server-only --architecture os.linux.x86_32

在 /program/server 文件夹 npm install --production

npm install fibers

我试图解决的问题:

转到 /programs/server/ 并运行 npm install fiber(并重新安装)

按照以下说明从源安装 https://www.npmjs.com/package/fibers

我的流星应用程序使用节点 8.11.2,但唯一可用于 Synology 的节点版本是 8.9.4。删除它并手动安装 8.11.2

构建一个默认的流星应用来检查我的应用是否有问题。

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

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

谢谢!

【问题讨论】:

嗨补丁,高质量的问题格式。我将尝试用我的 Raspberry Pi 3 重现你的问题,它也有 ARM7。同时,您可以在网上搜索将 Meteor 应用程序部署到 RPI,也许您会在那里找到一个很好的待办事项手册。 感谢您对 Jankapunkt 的关注!我会同时搜索 【参考方案1】:

在下文中,我将描述您将应用正确部署到 ARMv7 设备的方式。通过这样做我将重点介绍可能经常导致错误的重要步骤。我希望通过重现这些步骤来解决您的问题。

1。构建您的生产应用

确保应用程序启动、运行并且您的所有测试都在本地通过。 获取您当前的节点开发版本。请注意,它会有所不同,具体取决于您的项目使用的流星版本。注意:meteor guide on custom deployment 强调了匹配节点版本的重要性
$ 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 编译和安装本机插件,您可能还需要安装构建工具”。您将需要这个,因为 fibersbcrypt 就是这样的原生插件。
$ sudo apt-get install -y build-essential
验证您安装的节点版本
$ node -v
v8.11.4 # but we need v8.9.4
获取正确版本的节点(与您的开发版本完全匹配)的最简单方法是使用 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 包(尤其是本机包,例如 fibersbcrypt)而不会出现任何错误。现在返回bundle/ 并启动应用程序:
$ cd ../../
$ MONGO_URL=mongodb://yourmongodbcredentials node main.js

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


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

【讨论】:

感谢您的详尽解释!后天我会调查它。将重新安装设备并开始清理,目前我不再确信我的系统没有以某种方式损坏。我会告诉你的。 您解决了这个问题吗?如果您的环境有问题,我们可以继续聊天。 真的很抱歉,我还是要调查一下 :( 希望很快!

以上是关于将 Meteor 应用程序部署到 Synology armv7:“node-fibers”存在问题的主要内容,如果未能解决你的问题,请参考以下文章

将 Meteor 部署到 Google App Engine 2017

将 Meteor 应用程序部署到 Elastic Beanstalk

MongoDB / Meteor / 将 MONGO_URL 导出到已部署的应用程序

MongoDB / Meteor / 将 MONGO_URL 导出到已部署的应用程序

将 Meteor 应用程序从 OS X 部署到 Linux 会导致 bcrypt 问题

将 Meteor 项目部署到我自己的域?