在Elastic Beanstalk上升级Ruby

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

我一直在我们的qa上使用ruby 2.2.2并且现在已经使用了大约8个月的env’s。 我刚刚设置我们的生产env星期一,它不会部署,因为它说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 。 必须有一种更简单的方法来做到这一点。

由于您希望同时更新平台和版本标签,因此始终可以使用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. 在运行我需要的ruby版本的beanstalk上启动了一个全新的环境,2.3(在我的情况下,我需要从Ruby 2.2到Ruby 2.3的更新) – 使用示例应用程序来更快更容易地启动。
  2. SSH-ed到新实例并安装了我的应用程序所需的所有依赖项(包,开发工具等) – 您也可以在.ebextensions目录中执行这些操作。
  3. 从运行ruby 2.3的实例创建了一个自定义AMI,并安装了所有内容
  4. 使用Rohit发布但与一些tweek相同的命令:
 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”。