AWS Elastic Beanstalk无效的二进制软件包

时间:2019-04-23 15:36:13

标签: amazon-web-services heroku amazon-elastic-beanstalk

我正在将项目从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! beer@0.1.0 start: `node server/server.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the beer@0.1.0 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编写的客户端和服务器代码。我正在通过包含多个文件夹(包括node_modules/)的ZIP文件上传代码。

1 个答案:

答案 0 :(得分:1)

某些库对构建它们的操作系统和/或CPU体系结构敏感。对于以低级语言或链接到系统库的模块实现的情况尤其如此。在这种情况下,您似乎正在使用bcryptlargely 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.jsonpackage-lock.json。 Elastic Beanstalk will install its own node_modules/ from these files(如果存在)。这应该确保所有库与其操作系统兼容。