我刚刚部署了我的第一个生产Meteor应用程序,但遇到了一个非常重要的问题.当我尝试运行我的应用程序时,出现以下错误:
/home/hiapp/bundle/programs/server/node_modules/fibers/future.js:173 throw(ex); ^ Error: /home/hiapp/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/build/Release/bcrypt_lib.node: invalid ELF header at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17) at require (module.js:380:17) at bindings (/home/hiapp/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/node_modules/bindings/bindings.js:74:15) at Object.<anonymous> (/home/hiapp/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/bcrypt.js:1:97) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12)
通过一些研究,似乎问题是bcrypt是特定于平台的,并且因为我的开发是在OS X 10.10上,但我的生产服务器在Ubuntu 14.04上,因此存在问题.我的工作是从程序/服务器文件夹运行npm install bcrypt,然后将它从programs / server / node_modules / bcrypt复制到programs / server / npm.这似乎是很多手动步骤.
我正准备重新部署我的应用程序一些修复程序,我担心我将不得不再次执行相同的步骤.有没有更好的方法来部署您不遇到此问题的Meteor应用程序?我的程序目前是:
>运行meteor build
> scp导致tarball到我的服务器(Digital Ocean)
>在我的应用用户主目录中爆炸tarball
>添加步骤:重新编译bcrypt并如上所述复制目录
我猜测自动刷新将在服务器第一次尝试加载它将在火热的荣耀中爆炸的新库时被破坏.简单地在服务器上克隆GIT仓库并直接从那里进行构建会不会更好,或者我可以使用mup或任何其他工具来帮助平滑部署过程吗?
解决方法
我有完全相同的问题 – 我转而使用Meteor Up(MUP)而问题消失了.更不用说它更简单了!
我在youtube上遵循了本教程 – https://www.youtube.com/watch?v=WLGdXtZMmiI,其中包括使用MUP部署到Digital Ocean.
MUP的github页面特别提到它处理二进制NPM模块 – https://github.com/arunoda/meteor-up#binary-npm-module-support
希望有所帮助!