AWS Elastic Beanstalk部署Rails应用时Bundle Install失败求助
解决AWS Elastic Beanstalk部署中Bundle Install失败(错误11)的问题
嘿,我帮你梳理下解决这个问题的思路——错误11只是个笼统的失败标识,咱们得先挖到具体原因,再针对性解决:
第一步:先拿日志找具体错误
Elastic Beanstalk的日志里藏着bundle install到底卡在哪了,先去获取完整日志:
- 登录AWS控制台,进入你的Elastic Beanstalk环境,切换到日志标签页,选择「请求完整日志」,下载解压后重点看
eb-engine.log或者bundle_install.log,里面会有详细的失败原因(比如Ruby版本不匹配、某个gem依赖缺失、私有gem权限问题之类的)
常见问题及解决办法
1. Ruby版本不匹配
Elastic Beanstalk默认的Ruby版本可能和你本地项目用的不一致,这是最常见的坑:
- 在项目根目录创建
.ruby-version文件,写入你项目使用的Ruby版本(比如3.2.2) - 同时在
Gemfile开头明确指定ruby版本:ruby '3.2.2' - 本地执行
bundle install更新Gemfile.lock,然后提交所有文件重新部署
2. 私有Gem/自定义源的权限问题
如果你的Gemfile里用到了私有GitHub Gem或者自定义gem源,Elastic Beanstalk服务器可能没权限访问:
- 私有GitHub Gem:
- 本地生成新的SSH密钥:
ssh-keygen -t ed25519 -C "your-email@example.com" - 把公钥添加到GitHub仓库的「部署密钥」里(仓库设置→部署密钥→添加密钥)
- 在Elastic Beanstalk控制台的配置→软件中,添加环境变量
BUNDLE_GITHUB__COM,值格式为你的私钥内容:github.com(比如ssh-rsa AAAAB3Nza... your-email@example.com:github.com)
- 本地生成新的SSH密钥:
- 自定义gem源:确保源地址是可公开访问的,或者在环境变量里配置源的认证信息
3. 系统依赖缺失
有些gem(比如pg、nokogiri、rmagick)需要系统层面的依赖库,Elastic Beanstalk默认没安装:
- 在项目根目录创建
.ebextensions文件夹,里面新建01_install_deps.config文件,内容如下(根据你的gem需求调整):packages: yum: postgresql-devel: [] # 适配pg gem libxml2-devel: [] # 适配nokogiri gem libxslt-devel: [] ImageMagick-devel: [] # 适配rmagick gem - 提交这个目录和文件到代码仓库,重新部署
4. Bundler版本不统一
你更新了本地的bundler,但Elastic Beanstalk服务器上的版本可能还是旧的:
- 确保本地执行
bundle install生成的Gemfile.lock里包含BUNDLED WITH字段,指定正确的bundler版本 - 或者在
.ebextensions里加个配置强制更新bundler:commands: update_bundler: command: "gem update bundler --no-document"
5. 缓存残留问题
有时候旧的依赖缓存会搞事情,试试清除缓存后重新部署:
- 在Elastic Beanstalk控制台的「环境操作」里选择「重建环境」
- 或者本地执行
bundle clean --force,再重新bundle package --all,提交代码后重新部署
最后提醒下:每次修改后,一定要把所有相关文件(比如.ruby-version、.ebextensions配置、Gemfile.lock)都提交到代码仓库,再触发部署哦!
内容的提问来源于stack exchange,提问作者Meg.o
相关产品推荐
相关产品推荐

