流星在ElasticBeanstalk上的部署失败
问题描述:
爱MeteorJS到目前为止。也许那些已经部署到EB的人可能能够帮助我。流星在ElasticBeanstalk上的部署失败
我能够成功地将我的应用程序部署到EB,但是后续部署失败。在NPM安装阶段,我得到一个错误信息,像这样
gyp ERR! node -v v0.10.42
gyp ERR! node-gyp -v v1.0.1
gyp ERR! not ok
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the bcrypt package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls bcrypt
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 4.1.17-22.30.amzn1.x86_64
npm ERR! command "/opt/elasticbeanstalk/node-install/node-v0.10.42-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v0.10.42-linux-x64/bin/npm" "--production" "rebuild"
npm ERR! cwd /tmp/deployment/application
npm ERR! node -v v0.10.42
npm ERR! npm -v 1.4.29
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /tmp/deployment/application/npm-debug.log
npm ERR! not ok code 0
Running npm install: /opt/elasticbeanstalk/node-install/node-v0.10.42-linux-x64/bin/npm
Setting npm config jobs to 1
我现在用的是铁CLI建立我的应用程序。我使用部署脚本看起来有点像这样:
rm -Rf build/bundle
iron build --server=https://my-domain.com --architecture os.linux.x86_64
eb deploy prod
的package.json在项目的根是这样的:
{
"name": "trail-status",
"version": "2.0.0",
"scripts": {
"start": "node build/bundle/main.js"
},
"dependencies": {
"fibers": "1.0.1",
"underscore": "*",
"source-map-support": "*",
"semver": "*",
"bcrypt": "*"
}
}
我试图消除建立/包/程序/服务器/ npm/npm-bcrypt/node_modules/bcrypt没有多少运气。也尝试从package.json中删除bcrypt。
答
我发现解决方案是使用demeteorizer来构建我的项目。这是我的脚本,对于部署非常有效。
rm -Rf elasticbeanstalk
rm -Rf build.zip
cd app
demeteorizer -a os.linux.x86_64 -o ../elasticbeanstalk
cd ..
zip -r build.zip elasticbeanstalk .ebextensions/ .elasticbeanstalk/ config/production
rm -Rf elasticbeanstalk
eb deploy production
rm -Rf build.zip
然后在.ebextensions/configuration.config
files:
"/opt/elasticbeanstalk/hooks/appdeploy/pre/51install_meteor.sh" :
mode: "000755"
user: root
group: root
encoding: plain
content: |
#!/usr/bin/env bash
echo !!! Setting up METEOR dependencies
export PATH=$PATH:/usr/local/bin
echo !!! Set PATH: $PATH
ln -s /opt/elasticbeanstalk/node-install/node-v0.10.42-linux-x64/bin/node /usr/local/bin/node
ln -s /opt/elasticbeanstalk/node-install/node-v0.10.42-linux-x64/bin/npm /usr/local/bin/npm
export HOME=/home/ec2-user
echo !!! Creating app bundle
cd /tmp/deployment/application/elasticbeanstalk/bundle/programs/server
npm install
cd /usr/local/bin
rm npm node
答
我已经遇到过这个问题。检查这个discussion。
该解决方案可能不只是一个。一些解决方案哟可以尝试:
# reinstall npm
npm install -g npm
# specify gcc
CC=/opt/local/bin/gcc CXX=/opt/local/bin/gcc npm install bcrypt
# add to package.json
"scripts": {
"preinstall": "npm i -g node-gyp && node-gyp clean"
}
它涉及到的服务器环境。您可以登录到您的EB实例以获取更多信息(您可以在EC2控制台中看到它)。
我不知道在后台做什么铁建设,但你运行故宫在同一基础设施+节点版本安装? – Clarkie