流星在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。

+0

我不知道在后台做什么铁建设,但你运行故宫在同一基础设施+节点版本安装? – Clarkie

我发现解决方案是使用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

该解决方案可能不只是一个。一些解决方案哟可以尝试:

update gcc

# 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控制台中看到它)。