我刚刚部署了我的第一个生产 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
我猜自动刷新会在服务器第一次尝试加载新库时被破坏,它会在火热的荣耀中爆炸。直接在服务器上克隆 GIT 存储库并直接从那里进行构建会更好,还是可以使用
mup
或任何其他工具来帮助简化部署过程?
请您参考如下方法:
有两种方法可以解决这个耗时的问题,这完全取决于您的部署方式。
手动部署
如果您手动部署您的应用程序,请确保您使用的是节点 v0.10.361,并且仅此而已。 Meteor 不适用于节点 v0.12.x。更具体地说,光纤模块会导致很多问题,它会因各种错误而窒息2。
以下是为 me3、4 修复它的过程:
npm
中删除 bcrypt 模块目录:$ cd path_to_your_app/bundle/programs/server
$ rm -rf npm/npm-bcrypt/node_modules/bcrypt/
node_modules
首先是目录。这会针对服务器的操作系统构建 bcrypt:$ npm install bcrypt
npm
目录:$ cp -r node_modules/bcrypt npm/npm-bcrypt/node_modules/bcrypt
使用 Meteor Up (mup)
如果您使用的是 mup,那么这个过程会更容易,因为该线程上的其他答案指出。但是,在某些情况下仍然会出现错误,包括
invalid ELF header
错误。确保您拥有最新版本的 mup
npm update mup -g
.
/opt/
在那里你可以找到your_app
和 nodejs
.删除它们。 mup.json
中的节点版本是否正确,仅 0.10.361 和以下设置文件:{
...
"setupMongo": true,
"setupNode": true,
"nodeVersion" : "0.10.36",
"setupPhantom": true,
"enableUploadProgressBar": true,
// Application name (No spaces)
"appName": "your_app",
// Location of app (local directory)
"app": ".",
...
}
$ mup setup
$ mup deploy
server
服务器上的文件夹并重建模块:$ cd /opt/your_app/app/programs/server
$ npm rebuild
$ npm install
可选:
$ sudo npm update node-gyp -g
理智的步骤
您还可以执行一些其他步骤:
sudo service apache2 stop
停止 apache或 brute force close (不推荐)端口 80 上的任何正在运行的进程。/etc/init
或 /etc/init.d
. $ mup logs -f
查看 mup 日志。要查看您的应用程序中的错误,文件末尾 /var/log/upstart/your_app.log
很有用(假设您配置了 Upstart )。 $ ln -s /etc/nginx/sites-available/your_server_config /etc/nginx/sites-enabled/your_server_config
此外,请确保您指定了
default_server
5 在 your_server_config
. 引用
[XXX.XX.XXX.XX] Error: '/opt/your_app/programs/server/node_modules/fibers/bin/linux-x64-v8-3.28/fibers.node' is missing. Try reinstalling 'node-fibers'?
错误。 Link . default_server
. Link . sudo service mongod/nginx/yourapp restart
.