我正在努力将项目从Heroku迁移到AWS。部署后我不断收到错误:'无效的ELF标题'。我在使用AWS Lambda时发现了类似问题的帖子,但我不明白为什么我会在Elastic Beanstalk中遇到二进制包问题。
Elastic Beanstalk不提供配置环境来运行类似于Docker的代码吗?我觉得这个问题必须更加复杂,因为我在Elastic Beanstalk中找不到其他任何有此问题的人。
这是我得到的确切错误:
Error: /var/app/current/node_modules/bcrypt/lib/binding/bcrypt_lib.node: invalid ELF header
at Object.Module._extensions..node (internal/modules/cjs/loader.js:730:18)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)
at Object.<anonymous> (/var/app/current/node_modules/bcrypt/bcrypt.js:6:16)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] start: `node server/server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /tmp/.npm/_logs/2019-04-15T00_54_06_983Z-debug.log
我在Mac上工作,我的代码包含用React,node.js和SQL编写的客户端和服务器代码。我通过包含多个文件夹的ZIP文件上传我的代码,包括node_modules/
。
某些库对构建它们的操作系统和/或CPU体系结构很敏感。对于以低级语言实现的模块或链接到系统库的模块尤其如此。在这种情况下,您似乎使用的bcrypt
是largely written in C++。
这是您上传到Elastic Beanstalk的zip文件不应包含node_modules/
文件夹(或Git忽略的任何其他内容)的原因之一。创建用于上传到Elastic Beanstalk的zip的最简单方法是probably to use git archive
:
git archive -v -o myapp.zip --format=zip HEAD
这将尊重你的忽视,而manually zipping将包括它们。
您的存档应在其根目录中包含package.json
和package-lock.json
。 Elastic Beanstalk will install its own node_modules/
from these files如果存在的话。这应确保所有库都与其操作系统兼容。