推送到 Elastic Beanstalk 时出现 Rails 捆绑错误

Posted

技术标签:

【中文标题】推送到 Elastic Beanstalk 时出现 Rails 捆绑错误【英文标题】:Rails bundle error when pushing to Elastic Beanstalk 【发布时间】:2019-06-22 22:25:27 【问题描述】:

我在 Heroku 上部署了一个应用程序,我目前正尝试在 AWS 上创建相同的应用程序。 我已经复制了我的文件夹,在 Github 上创建了一个完整的独立仓库并安装了 ebcli,设置看起来不错。

当我尝试运行 eb deploy 时,出现以下错误: [实例:i-03051e2a022886184] 实例上的命令失败。返回码:1 输出:(TRUNCATED)...:in find_spec_for_exe': can't find gem bundler (>= 0.a) with executable bundle (Gem::GemNotFoundException) from /opt/rubies/ruby-2.5.3/lib/ruby/site_ruby/2.5.0/rubygems.rb:308:inactivate_bin_path' 来自 /opt/rubies/ruby-2.5.3/bin/bundle:23:in `'。

我在网上查了一下,它说这是由于您的 gemlock 文件捆绑器版本和实际捆绑器版本之间的不兼容造成的。

我尝试将我的捆绑程序版本更改为这个版本,但我放弃并返回到 2.0.1,因为否则我必须安装太多依赖项。 我删除了 gemlock,再次捆绑,但尝试部署时仍然遇到相同的错误。

使用我的 heroku 版本,它总是有效。

知道怎么解决吗?

非常感谢

【问题讨论】:

你在 Gemfile 中有 bundler gem 吗? 嗨!其实我没有。刚刚在我的终端上安装了 gem install bundler。我还需要将它添加到 gemfile 中吗? 您不需要在 EB 上搞乱捆绑器。您是否查看了 /var/log/eb-activity.log 文件的最后 100 行日志?还有其他错误吗? 【参考方案1】:

几个月前我们也从 Heroku 迁移到了 AWS,可能需要一些自定义脚本才能让事情正常工作。

了解更多关于您的 EB 环境会有所帮助,但我假设您在 Amazon Linux 2.9.0 上使用 Ruby 2.5 和 Puma (?)

不确定它附带的捆绑版本,但我不认为它是 2.x。所以你必须添加一个 .ebextensions 文件来安装你喜欢的捆绑版本。

# .ebextensions/01_install_bundler.config

container_commands:
  install_bundler:
    command: “gem install bundler —-version 2.0.0”

更多信息AWS Linux customizations

最终,我们对 AWS 环境感到满意(成本更低,性能更好),但需要更多的工作来设置它

【讨论】:

非常感谢您的回答。是的,带有 Puma 的 Ruby 2.5.3。我已经添加了扩展文件夹和您提到的文件,但仍然无法正常工作......我得到了同样的错误 我还没有答案,但我知道通过 ssh gem install bundler 运行会将 bundler 更新到最新版本。之后运行bundler -v 仍然显示旧版本。 export BUNDLER_VERSION=2.0.1 然后bundler -v 显示正确的版本。希望它能帮助您找出正确的解决方法【参考方案2】:

实际上问题的存在是因为 eb 环境中的捆绑器版本比项目源中使用的版本旧。

因此解决方案是使用小于或等于 eb env 安装版本的捆绑程序版本。

首先卸载当前的捆绑器:

gem 卸载包

然后安装所需的:

gem install bundler -v 1.16.6

See more details

【讨论】:

以上是关于推送到 Elastic Beanstalk 时出现 Rails 捆绑错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 MacOSX 将 Rails 应用程序推送到 AWS Elastic Beanstalk

将本地 Rails 应用程序中的数据推送到 Elastic Beanstalk

git:在 Mac 上尝试将存储库推送到 Amazon Elastic Beanstalk 时,“aws.push”不是 git 命令

sh 构建Docker镜像,将其推送到AWS EC2 Container Registry,然后将其部署到AWS Elastic Beanstalk

部署到 Elastic Beanstalk 时出现 JavaAgentDetector 错误

登录角色时出现 AWS Elastic Beanstalk ServiceRole 错误