在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"
- 一切都正确部署
- 喝点啤酒。
我找到了解决这个问题的不同方法。
我的工作方式类似于上面的评论,只有一点点变化。
我做的步骤:
- 在运行我需要的ruby版本的beanstalk上启动了一个全新的环境,2.3(在我的情况下,我需要从Ruby 2.2到Ruby 2.3的更新) – 使用示例应用程序来更快更容易地启动。
- SSH-ed到新实例并安装了我的应用程序所需的所有依赖项(包,开发工具等) – 您也可以在.ebextensions目录中执行这些操作。
- 从运行ruby 2.3的实例创建了一个自定义AMI,并安装了所有内容
- 使用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”。