我正在致力于将项目从 Heroku 迁移到 AWS。部署后我不断收到错误消息:“无效的 ELF header ”。我在使用 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! <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="1a787f7f685a2a342b342a" rel="noreferrer noopener nofollow">[email protected]</a> start: `node server/server.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="afcdcacaddef9f819e819f" rel="noreferrer noopener nofollow">[email protected]</a> 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 忽略的其他任何内容)的原因之一。创建 zip 以上传到 Elastic Beanstalk 的最简单方法是 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如果他们在场的话。这应该确保所有库都与其操作系统兼容。
关于amazon-web-services - AWS Elastic Beanstalk 无效的二进制包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814769/