将Meteor应用程序部署到Synology armv7:节点纤维存在问题

时间:2018-08-30 10:29:50

标签: node.js meteor synology node-fibers fiber

我花了几天的时间尝试在我的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

  • / library /服务器文件夹npm install --production上的
  • npm install fibers

我试图解决的问题:

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

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

  • 构建一个默认的流星应用程序,以检查我的应用程序是否出现问题。

到目前为止,什么都没做,我不知道下一步该怎么做。

我怀疑问题是光纤是为linux-arm-57构建的,我想我需要arm-7I吗? 有什么我可以做的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

以下,我描述了将应用正确部署到ARMv7设备的方式。这样,我将突出显示可能经常引起错误的重要步骤。希望您的问题可以通过重复这些步骤来解决。

1。构建您的生产应用

  • 确保该应用启动,运行并且所有测试都在本地通过。
  • 获取当前的node开发版本。请注意,它会有所不同,具体取决于您的项目使用的流星版本。注意: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。准备目标设备的环境

  • 流星构建也是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。