我最近在beanstalk上部署了一个新的node.js应用程序并继续遇到以下错误?
[Instance:i-cce89e4a]命令在实例上失败。返回码:1输出:(TRUNCATED)... opt / elasticbeanstalk / containerfiles / ebnode.py“,第180行,在npm_install中提升e subprocess.CalledProcessError:命令'['/ opt / elasticbeanstalk / node-install / node-v4 .4.6-linux-x64 / bin / npm',' - production','rebuild']'返回非零退出状态254. Hook /opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh失败。更多详细信息,请使用控制台或EB CLI检查/var/log/eb-activity.log。
我的节点版本是:4.4.7
部署似乎在下面的最后一行失败:
except Exception, e:
npm_debug_log = '/var/log/nodejs/npm-debug.log'
app_npm_debug_log = os.path.join(app_path, "npm-debug.log")
write_event('Failed to run npm install. Snapshot logs for more details.', 'ERROR')
if not os.path.exists(app_npm_debug_log):
utc_time_str = datetime.datetime.utcnow().strftime("UTC %Y/%m/%d %H:%M:%S")
err_msg = str.format("{0} cannot find application npm debug log at {1} \n", utc_time_str, app_npm_debug_log)
print(err_msg)
with open(npm_debug_log, 'a') as f:
f.write(err_msg)
else:
shutil.copyfile(app_npm_debug_log, npm_debug_log)
raise e
我似乎无法找到任何可靠的解决方案?
我手动压缩并上传文件。
该应用程序在本地完美运行。
有人可以帮忙吗?
Application deployment failed at 2016-07-09T18:47:38Z with exit status 1 and error: Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh failed.
+ /opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install
npm WARN package.json dashboard@0.0.2 No repository field.
> history@1.17.0 postinstall /tmp/deployment/application/node_modules/history
> node ./npm-scripts/postinstall.js
npm ERR! Linux 4.4.14-24.50.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/npm" "--production" "rebuild"
npm ERR! node v4.4.6
npm ERR! npm v2.15.5
npm ERR! path /tmp/deployment/application/node_modules/gulp-main-bower-files/node_modules/main-bower-files/node_modules/vinyl-fs/node_modules/duplexify/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/esprima/bin/esvalidate.js
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall chmod
npm ERR! enoent ENOENT: no such file or directory, chmod '/tmp/deployment/application/node_modules/gulp-main-bower-files/node_modules/main-bower-files/node_modules/vinyl-fs/node_modules/duplexify/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/esprima/bin/esvalidate.js'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! Please include the following file with any support request:
npm ERR! /tmp/deployment/application/npm-debug.log
Running npm install: /opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/npm
Setting npm config jobs to 1
npm config jobs set to 1
Running npm with --production flag
Failed to run npm install. Snapshot logs for more details.
Traceback (most recent call last):
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 695, in
main()
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 677, in main
node_version_manager.run_npm_install(options.app_path)
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 136, in run_npm_install
self.npm_install(bin_path, self.config_manager.get_container_config('app_staging_dir'))
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 180, in npm_install
raise e
subprocess.CalledProcessError: Command '['/opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/npm', '--production', 'rebuild']' returned non-zero exit status 254.
答案 0 :(得分:3)
我之前在我的zip文件中包含了node_modules文件夹。排除此文件夹解决了问题
答案 1 :(得分:3)
几个小时后搜索为什么部署失败。我可以说以下任何一点都可以解决问题。
t2.micro
更改为t2.small
.npmrc
文件# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5
unsafe-perm=true
答案 2 :(得分:2)
我没有足够的信息来回答...... /var/log/eb-activity.log说什么?
...但是 我在使用t2.small的beanstalk上运行npm安装时遇到类似的错误:它没有足够的RAM,npm失败。升级到更大的实例可以解决问题。 (提交node_module也可以解决这个问题,但我不想这样做。)
您应该做的是使用SSH连接到实例,并使用top / htop观察部署时发生的情况。
答案 3 :(得分:2)
如果nano
在t3.nano
实例(例如.ebextensions/swap.config
)上因您而失败,则另一种解决方法是通过在项目{{1 }},其中包含以下内容:
commands:
enable_swap_memory:
command: "fallocate -l 1G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile"
ignoreErrors: true
然后,尝试再次运行eb deploy
,npm install
应该会成功。
答案 4 :(得分:0)
在遇到持续的 npm install 问题后,我决定跳过 Elastic Beanstalk 上的这一步,而是将我的 node_modules
目录连同来自我的 CI 环境(Github Actions)的构建文件一起推送。
我使用这个模块来安装正确的 Elastic Beanstalk 配置。自述文件很好地解释了这个问题: https://github.com/mixmaxhq/eb-disable-npm
我必须将 !node_modules
添加到我的 .ebignore
以确保它被推送。到目前为止,还没有 EB 错误,而且部署速度要快得多。
答案 5 :(得分:0)
为 codepipeline 启用 S3 Bucket Versioning 为我解决了这个问题