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 应用程序

Rails:如何为 Rails activerecord 模型中的属性创建默认值? [复制]

如何为测试禁用 AWS 参数存储自动配置?

如何为 HEAD 请求定义 Rails 路由

如何为 Rails 中的 url 助手设置默认主机?

AWS CloudFormation:如何为 Lambda 代码指定来自另一个 AWS 账户的存储桶?