AWS Elastic Beanstalk - 如何将现有环境从Ruby 2.1升级到Ruby 2.2

时间:2015-06-29 16:18:27

标签: ruby elastic-beanstalk ruby-2.1 amazon-elastic-beanstalk ruby-2.2

AWS Elastic Beanstalk - 无法克隆最新平台eb upgrade从Ruby 2.1到Ruby 2.2

我一直在粉碎这个。早在5月,AWS就宣布他们的Ruby Elastic Environments现在提供Ruby-2.2(例如ruby-2.2-(passenger-standalone)ruby-2.2-(puma))。我无法将现有的ruby-2.1环境升级到ruby-2.2。看来我必须完全重建它们......这看起来很傻?有没有其他人经历过这个?我只是缺少一些简单的东西吗?

额外信息

我在 staging production 环境中使用ruby-2.1-(passenger-standalone)几个月后兴高采烈地使用了eb clone <env-name> --update。现在,我想将升级到最新的ruby-2.2平台。 AWS文档说这非常简单,事实上他们的一些文档似乎表明你可以使用EB CLI 3.4.5。该标志并不存在于我使用的$ eb status Environment details for: staging Application name: xyz Region: us-west-2 Deployed Version: fbe7 Environment ID: someId Platform: 64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.1 (Passenger Standalone) Tier: WebServer-Standard CNAME: bla.bla.bla.elasticbeanstalk.com Updated: 2015-06-26 22:48:59.689000+00:00 Status: Ready Health: Green 中:(此外,网络控制台还有克隆与最新平台选项菜单项,但已停用

看来,我所能做的就是到达最新的Ruby-2.2实例,就是从头开始创建一个全新的环境。这非常令人讨厌。

所以这就是我尝试过的......

$ eb upgrade
Environment already on most recent platform version.

很好,确认我使用的是Ruby 2.1。所以让我们尝试升级:

$ eb platform select
It appears you are using Ruby. Is this correct?
(y/n): y

Select a platform version.
1) Ruby 2.2 (Puma)
2) Ruby 2.2 (Passenger Standalone)
3) Ruby 2.1 (Puma)
4) Ruby 2.1 (Passenger Standalone)
5) Ruby 2.0 (Puma)
6) Ruby 2.0 (Passenger Standalone)
7) Ruby 1.9.3
(default is 1): 2

好的,这很好,那么平台本身呢:

$ eb platform show
Current default platform: Ruby 2.2 (Passenger Standalone)
New environments will be running:  64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.2 (Passenger Standalone)

Platform info for environment "staging":
Current: 64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.1 (Passenger Standalone)
Latest:  64bit Amazon Linux 2015.03 v1.4.3 running Ruby 2.1 (Passenger Standalone)

现在,这是我的平台设置:

name

所以新环境将利用Ruby-2.2版本。这很棒,但是我是否真的必须退出我已配置的Ruby-2.1版本而不是新创建的Ruby-2.1版本?来吧?

3 个答案:

答案 0 :(得分:50)

我找到了一个解决方案,使用aws cli(不是eb cli):

aws elasticbeanstalk update-environment --solution-stack-name "64bit Amazon Linux 2016.03 v2.1.0 running Ruby 2.3 (Puma)" --environment-name "dev-bg-123456" --region "us-east-1"

可以使用homebrew安装aws cli:

brew install awscli

答案 1 :(得分:1)

我对这一挑战的解决方案是:

  1. 推出全新的环境。
  2. 创建Web应用程序或工作程序。
  3. 选择您想要的环境,可能是最新的环境。在我的案例中乘客使用Ruby-2.2。
  4. 我选择部署示例应用程序,以便新环境成功。
  5. 选择新环境的剩余选项并启动它。
  6. 成功启动后,我设置了所有环境变量;例如我的所有数据库,smtp,RAILS_ENV / RACK_ENV等。然后我转到我以前部署的应用程序,并将我最​​新的质量版本部署到全新的环境中。

    人们会同意这比简单的eb upgrade要多得多。瘸子酱。

答案 2 :(得分:0)

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

实现它的方式与上面的注释类似,但是我设法更新了现有的beantalk环境,并且没有将代码部署到全新的环境中。

我执行的步骤:

  1. 在beantalk上启动了一个全新的环境,该环境运行需要的ruby版本2.3(就我而言,我需要从Ruby 2.2升级到Ruby 2.3)
  2. SSH进入新实例并安装我的应用程序需要的所有依赖项(程序包,开发工具等)-您也可以在.ebextensions目录中完成这些操作
  3. 从运行ruby 2.3的实例中创建一个自定义AMI,并安装所有内容
  4. 使用了拉尔夫(Ralph)发布的相同命令,但间隔了几个星期:
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用于在现有环境中启动新实例。 以前,每次尝试都无法达到Ralph的建议命令。