【问题标题】:Upgrade Ruby on Elastic Beanstalk在 Elastic Beanstalk 上升级 Ruby
【发布时间】:2016-05-14 04:40:55
【问题描述】:

如何在 ELB 上设置和更新 ruby​​ 版本?

我已经在我们的 qa 和 staging env 中使用 ruby 2.2.2 大约 8 个月了。我周一刚刚设置了我们的生产环境,它不会部署,因为它说 ruby​​ 设置为 2.2.3,我的 gemfile 说 2.2.2。我更新并重新部署,一切似乎都很好。

我回到了 qa/staging 环境,无法让它更新到 ruby​​ 2.2.3。一直说 ruby​​ 版本是 2.2.2 而 Gemfile 是 2.2.3

我升级了(通过 elb ui):

64bit Amazon Linux 2015.03 v1.3.1 running Ruby 2.2 (Passenger Standalone)

64bit Amazon Linux 2015.09 v2.0.6 running Ruby 2.2 (Passenger Standalone)

现在显示Your Ruby version is 2.2.3, but your Gemfile specified 2.2.2。必须有一种更简单的方法来做到这一点。

【问题讨论】:

  • 澄清一下,您想在所有环境中使用 Ruby 2.2.3,对吗?您是否在 gem 文件中指定了 ruby​​ 2.2.3?见bundler.io/v1.3/gemfile_ruby.html
  • 将您的 Gemfile 上的 ruby​​ 版本设置为 2.2.3 并删除您的 Gemfile.lock 文件。在本地运行 bundle install ,提交代码并部署。
  • 正确,我们在 qa 和 stag 上使用 2.2.2,当我设置新的 prod 环境时,elb 想要使用 2.2.3,所以我在 Gemfile 中设置并部署它并在 prod 上运行。但是在将其合并到 qa 分支后,它不会部署。我会尝试破解 .lock 文件并重新部署。

标签: ruby-on-rails ruby amazon-elastic-beanstalk


【解决方案1】:

我找到了解决这个问题的不同方法。

我让它工作的方式与上面的评论类似,只是有一点小改动。

我做的步骤:

  1. 在 beanstalk 上启动了一个全新的环境,运行我需要的 ruby​​ 版本 2.3(在我的情况下,我需要从 Ruby 2.2 更新到 Ruby 2.3) - 使用示例应用程序来更快、更轻松地启动。
  2. SSH-ed 到新实例并安装我的应用程序需要的所有依赖项(包、开发工具等) - 您也可以在 .ebextensions 目录中执行这些操作
  3. 从运行 ruby​​ 2.3 的实例创建了一个自定义 AMI,并安装了所有东西
  4. 使用 Rohit 发布的相同命令,但需要一些 tweeks:
aws elasticbeanstalk update-environment --region "REGION" --environment-name "ENV_NAME" --solution-stack-name "64bit Amazon Linux 2018.03 v2.8.1 running Ruby 2.3 (Puma)" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=ImageId,Value="ami- 
xxxxxxxx"

AMI 选项设置 对我来说很关键,因为这帮助我安装了 ruby​​ 2.3.7 的 AMI,用于在现有环境中启动新实例。 以前只是点击@Rohit Banga 建议的命令每次尝试都失败。

别忘了,我还在我的 Gemfile 中指定了 ruby​​ 版本“2.3.7”。

【讨论】:

    【解决方案2】:

    由于您想同时更新平台和版本标签,您始终可以使用 UpdateEnvironment API 指定解决方案堆栈名称和版本标签参数。

    http://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateEnvironment.html

    您可以使用 aws cli 或 sdk 来执行此操作。

    @Scott 描述的分步操作:

    • 更新 Gemfile 以匹配新平台上的 ruby​​ 版本
    • 压缩代码库(包括 .elasticbeanstalk 和 .ebextensions),
    • 通过应用程序版本上传到 elb(AWS 控制台 -> EB -> 所有应用程序 -> 应用程序版本)
    • 运行aws elasticbeanstalk update-environment --environment-name "corresponding_env_name" --solution-stack-name "64bit Amazon Linux 2015.09 v2.0.6 running Ruby 2.2 (Passenger Standalone)" --version-label "zip_name_you_uploaded"
    • 一切部署正确
    • 喝点啤酒。

    【讨论】:

    • 如果平台版本也撞到了它的ruby版本,他们不是总是需要同时完成吗?我将检查我的暂存更新的 UpdateEnv API,因为我最终为 qa 重建了 env。谢谢!
    • 我看到了您的用例,但如果您可以在 Gemfile 中锁定到 2.2.x 之类的内容,那也可以。
    • 配置更新后无法推送代码,如何获取版本标签?
    • 您可以使用 CreateApplicationVersion API docs.aws.amazon.com/elasticbeanstalk/latest/api/… 或者您可以使用控制台上的“上传和部署”按钮,然后在应用程序版本页面上传新版本。
    • 好的,这就是我所做的(随时将此添加到您的答案中以供参考)。更新 Gemfile 以匹配新平台上的 ruby​​ 版本,压缩代码库(包括 .elasticbeanstalk 和 .ebextensions),通过应用程序版本上传到 elb,运行 aws elasticbeanstalk update-environment --environment-name "corresponding_env_name" --solution-stack-name "64bit Amazon Linux 2015.09 v2.0.6 running Ruby 2.2 (Passenger Standalone)" --version-label "zip_name_you_uploaded" 一切正确部署,现在我要喝点啤酒了。谢谢罗希特!
    猜你喜欢
    • 2019-10-05
    • 2021-08-06
    • 2021-11-09
    • 2015-09-16
    • 2021-08-07
    • 2013-06-13
    • 2016-11-08
    • 2013-11-25
    • 2016-12-22
    相关资源
    最近更新 更多