将 Meteor 应用程序从 OS X 部署到 Linux 会导致 bcrypt 问题
Deploying Meteor app from OS X to Linux causes bcrypt issues
我刚刚部署了我的第一个生产版 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 上,所以- 这就是问题所在。我的解决方法是从 programs/server 文件夹中复制 运行 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
希望对您有所帮助!
我遇到了同样的问题并执行了以下操作来解决它:
卸载nodejs
sudo apt-get remove nodejs
删除所有剩余文件
rm -rf ~/.nvm ~/.npm
sudo rm -rf /usr/bin/node /opt/nodejs /usr/lib/node_modules /usr/local/lib/node_modules
从mup.json
中的默认设置升级节点版本
"nodeVersion": "0.10.33",
运行 mup 设置和部署
mup setup
mup deploy
有两种方法可以解决这个 time-consuming 问题,这完全取决于您的部署方式。
手动部署
如果您手动部署应用程序,请确保您使用的是节点 v0.10.361,并且仅此而已。 Meteor 不适用于节点 v0.12.x。更具体地说,fibers 模块会导致很多问题,它会因各种错误而窒息2.
以下是我修复它的过程3, 4:
从 npm
目录中删除 bcrypt 模块:
$ cd path_to_your_app/bundle/programs/server
$ rm -rf npm/npm-bcrypt/node_modules/bcrypt/
首先将 bcrypt 模块安装到 node_modules
目录中。这会针对服务器的 OS:
构建 bcrypt
$ npm install bcrypt
将新建的bcrypt模块移动到npm
目录中:
$ cp -r node_modules/bcrypt npm/npm-bcrypt/node_modules/bcrypt
最后,重启应用程序、mogodb和任何网络服务器进程,如nginx6,通过upstart if你已经配置好了。如果上面概述的步骤没有为您解决问题,您可以在下面的理智步骤标题下执行。
使用流星向上(mup)
如果您使用的是 mup,那么这个过程会容易得多,因为该线程上的其他答案指出了这一点。但是,在某些情况下仍然会出现错误,包括 invalid ELF header
错误。确保你有最新版本的 mup npm update mup -g
.
第一步是删除任何 pre-existing 应用程序和 nodejs 包。 Mup 将应用程序安装到 /opt/
中,您可以在其中找到 your_app
和 nodejs
。删除它们。
验证您的节点版本是否正确,仅 0.10.361 以及 mup.json
文件中的以下设置:
{
...
"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
最后,重启 应用程序、mogodb 和任何网络服务器进程,例如 nginx6。完成上述步骤后,您可能需要查看下面的 sanity steps 以获得更多调试选项。
理智步数
您还可以执行其他几个步骤:
请注意,apache 也可能将自己绑定到 nginx 运行正在使用的同一端口。查看应用程序的错误日志和网络服务器的错误日志,看看是否存在任何问题。通过 sudo service apache2 stop
或 brute force close(不推荐)在端口 80 上停止任何 运行ning 进程。
- 然后删除或移动 apache2 conf 文件以防止它再次启动。所有 conf 文件位于
/etc/init
或 /etc/init.d
.
使用$ mup logs -f
查看mup日志。要从您的应用程序中查看错误,文件末尾 /var/log/upstart/your_app.log
很有用(假设您配置了 upstart)。
如果使用 nginx,请确保您的目录是符号链接。
$ ln -s /etc/nginx/sites-available/your_server_config /etc/nginx/sites-enabled/your_server_config
此外,请确保您在 your_server_config
.
中指定了 default_server
5
检查mongodb是否可以运行。
参考资料
Meteor 版本 1.0.4.1(2015 年 3 月末发布)需要安装节点版本 0.10.36。我推荐使用节点版本管理器,n, to control what version of node is running on your server at any one time. Link.
可怕的 [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.
程序从这里修改:Link.
为了您的信息,我使用了 DigitalOcean 的非常有用的指南将流星应用程序部署到服务器。 Link.
指定 default_server
。 Link.
常见的重启进程有:sudo service mongod/nginx/yourapp restart
.
运行 npm rebuild
在 bundle/programs/server/npm/
应该负责为服务器平台重建模块,无论原始应用程序是捆绑在 Linux 还是 MacOS。
我刚刚部署了我的第一个生产版 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 上,所以- 这就是问题所在。我的解决方法是从 programs/server 文件夹中复制 运行 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
希望对您有所帮助!
我遇到了同样的问题并执行了以下操作来解决它:
卸载nodejs
sudo apt-get remove nodejs
删除所有剩余文件
rm -rf ~/.nvm ~/.npm
sudo rm -rf /usr/bin/node /opt/nodejs /usr/lib/node_modules /usr/local/lib/node_modules
从mup.json
中的默认设置升级节点版本"nodeVersion": "0.10.33",
运行 mup 设置和部署
mup setup
mup deploy
有两种方法可以解决这个 time-consuming 问题,这完全取决于您的部署方式。
手动部署
如果您手动部署应用程序,请确保您使用的是节点 v0.10.361,并且仅此而已。 Meteor 不适用于节点 v0.12.x。更具体地说,fibers 模块会导致很多问题,它会因各种错误而窒息2.
以下是我修复它的过程3, 4:
从
npm
目录中删除 bcrypt 模块:$ cd path_to_your_app/bundle/programs/server $ rm -rf npm/npm-bcrypt/node_modules/bcrypt/
首先将 bcrypt 模块安装到
构建 bcryptnode_modules
目录中。这会针对服务器的 OS:$ npm install bcrypt
将新建的bcrypt模块移动到
npm
目录中:$ cp -r node_modules/bcrypt npm/npm-bcrypt/node_modules/bcrypt
最后,重启应用程序、mogodb和任何网络服务器进程,如nginx6,通过upstart if你已经配置好了。如果上面概述的步骤没有为您解决问题,您可以在下面的理智步骤标题下执行。
使用流星向上(mup)
如果您使用的是 mup,那么这个过程会容易得多,因为该线程上的其他答案指出了这一点。但是,在某些情况下仍然会出现错误,包括 invalid ELF header
错误。确保你有最新版本的 mup npm update mup -g
.
第一步是删除任何 pre-existing 应用程序和 nodejs 包。 Mup 将应用程序安装到
/opt/
中,您可以在其中找到your_app
和nodejs
。删除它们。验证您的节点版本是否正确,仅 0.10.361 以及
mup.json
文件中的以下设置:{ ... "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
最后,重启 应用程序、mogodb 和任何网络服务器进程,例如 nginx6。完成上述步骤后,您可能需要查看下面的 sanity steps 以获得更多调试选项。
理智步数
您还可以执行其他几个步骤:
请注意,apache 也可能将自己绑定到 nginx 运行正在使用的同一端口。查看应用程序的错误日志和网络服务器的错误日志,看看是否存在任何问题。通过
sudo service apache2 stop
或 brute force close(不推荐)在端口 80 上停止任何 运行ning 进程。- 然后删除或移动 apache2 conf 文件以防止它再次启动。所有 conf 文件位于
/etc/init
或/etc/init.d
.
- 然后删除或移动 apache2 conf 文件以防止它再次启动。所有 conf 文件位于
使用
$ mup logs -f
查看mup日志。要从您的应用程序中查看错误,文件末尾/var/log/upstart/your_app.log
很有用(假设您配置了 upstart)。如果使用 nginx,请确保您的目录是符号链接。
$ ln -s /etc/nginx/sites-available/your_server_config /etc/nginx/sites-enabled/your_server_config
此外,请确保您在
your_server_config
. 中指定了 检查mongodb是否可以运行。
default_server
5
参考资料
Meteor 版本 1.0.4.1(2015 年 3 月末发布)需要安装节点版本 0.10.36。我推荐使用节点版本管理器,n, to control what version of node is running on your server at any one time. Link.
可怕的
[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.程序从这里修改:Link.
为了您的信息,我使用了 DigitalOcean 的非常有用的指南将流星应用程序部署到服务器。 Link.
指定
default_server
。 Link.常见的重启进程有:
sudo service mongod/nginx/yourapp restart
.
运行 npm rebuild
在 bundle/programs/server/npm/
应该负责为服务器平台重建模块,无论原始应用程序是捆绑在 Linux 还是 MacOS。