Rails:如何为 AWS Elasticbeanstalk 应用程序获取 puma 3.11?
Posted
技术标签:
【中文标题】Rails:如何为 AWS Elasticbeanstalk 应用程序获取 puma 3.11?【英文标题】:Rails: How to get puma 3.11 for AWS Elasticbeanstalk application? 【发布时间】:2018-10-09 00:28:34 【问题描述】:我正在尝试在新的 EC2 实例上部署 Rails 应用程序。 EB 使用的是 puma 2.16.0(已有 2 年历史)而不是我在 Gemfile.lock
中定义的版本 (3.11.0)。这对我来说是个问题,因为旧的 puma 版本依赖于旧版本的 rack
gem。但是我的一个新依赖项需要最新版本的rack
gem
EB 的当前平台:Puma 和 Ruby 2.3 在 64 位 Amazon Linux/2.4.4 上运行
所以 EB 自动使用旧的 puma 和旧的 rack 版本导致与我最新的 gems 冲突:
/opt/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/bundler-1.15.0/lib/bundler/runtime.rb:317:in check_for_activated_spec!: 你已经激活机架 1.6.8,但您的 Gemfile 需要机架 2.0.5。在您的命令前添加
bundle exec
可以解决此问题。 (Gem::LoadError)
我看到安装了两个版本(EB 的默认版本和 Gemfile.lock 的版本):
[ec2-user gems]$ ls -l /opt/rubies/ruby-2.3.4/lib/ruby/gems/2.3.0/gems/puma*
puma-2.16.0
puma-3.11.4
有没有办法使用我们自己的 puma 版本?
EB 的当前平台:Puma 和 Ruby 2.3 在 64 位 Amazon Linux/2.4.4 上运行
【问题讨论】:
当您看到第一个错误时,您正在运行什么命令?您是否尝试过在该命令前面加上bundle exec <command>
,就像消息所暗示的那样?
EB 管理(/abstracts)部署和应用程序重启命令。所以我认为应用程序不应覆盖或扩展管理其应用程序实例的方式。
【参考方案1】:
您使用的是相当旧版本的 ElasticBeanstalk Puma 平台 - 最新版本是 Puma with Ruby 2.5 running on 64bit Amazon Linux/2.7.2
。不幸的是,这仍然伴随着 Puma 2.16。同时安装两个不同版本的 Puma 可能会导致问题。
我认为你有几个选择:
-
从 puma 切换到乘客。
将依赖 rack 的其他 gem 降级到可以与旧版本 rack 一起使用的版本
请求 AWS 支持升级平台中的 Puma。
【讨论】:
是的,我也检查了最新的 EB 版本,才发现它运行的是相同的 puma 版本。以上是关于Rails:如何为 AWS Elasticbeanstalk 应用程序获取 puma 3.11?的主要内容,如果未能解决你的问题,请参考以下文章
Aws Elasticbean 不运行我的 .jar 应用程序