在Elastic Beanstalk上升级Ruby

时间:2016-02-04 14:09:28

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

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

我已经在我们的qa上使用ruby 2.2.2并且已经使用env's大约8个月了。我刚刚设置我们的生产env星期一,它不会部署,因为它说ruby设置为2.2.3,我的gemfile说2.2.2。我更新并重新部署,一切似乎都很好。

我回到了qa / staging env,无法让它更新为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。必须有一种更简单的方法来做到这一点。

2 个答案:

答案 0 :(得分:11)

由于您希望同时更新平台和版本标签,因此始终可以使用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"
  • 一切正确部署
  • 喝点啤酒。

答案 1 :(得分:1)

我找到了解决此问题的另一种方法。

我的工作方式与上面的评论类似,只是做了一点改动。

我执行的步骤:

  1. 在beantalk上启动了一个全新的环境,该环境运行我需要的ruby版本2.3(在我的情况下,我需要从Ruby 2.2到Ruby 2.3进行更新)-使用示例应用程序来更快,更轻松地启动。
  2. SSH进入新实例并安装我的应用程序需要的所有依赖项(程序包,开发工具等)-您也可以在.ebextensions目录中完成这些操作
  3. 从运行ruby 2.3的实例中创建一个自定义AMI,并安装所有内容
  4. 使用了Rohit发布的相同命令,但有几个星期:
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,该Ruby用于在现有环境中启动新实例。 以前,每次尝试仅击中@Rohit Banga条建议的命令都会失败。

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