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

Dan*_*Dan 26 ruby 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.看来我必须完全重建它们......这看起来很傻?有没有其他人经历过这个?我只是缺少一些简单的东西吗?

额外的信息

ruby-2.1-(passenger-standalone)在我的舞台制作环境中,我一直兴高采烈地使用了几个月.现在我想它们升级到最新的ruby-2.2平台.AWS文档说这非常简单,事实上他们的一些文档似乎表明你可以使用eb clone <env-name> --update.EB CLI 3.4.5我正在使用的那个标志不存在:(另外,Web控制台有一个Clone with Latest Platform选项菜单项,但它被禁用.

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

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

$ 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
Run Code Online (Sandbox Code Playgroud)

太棒了,证实我使用的是Ruby 2.1.所以让我们尝试升级:

$ eb upgrade
Environment already on most recent platform version.
Run Code Online (Sandbox Code Playgroud)

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

$ 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
Run Code Online (Sandbox Code Playgroud)

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

$ 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)
Run Code Online (Sandbox Code Playgroud)

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

Ral*_*den 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"
Run Code Online (Sandbox Code Playgroud)

aws cli可以用自制软件安装:

brew install awscli
Run Code Online (Sandbox Code Playgroud)

  • 对于寻找所有可用解决方案堆栈名称的人,您可以运行以下命令`aws elasticbeanstalk list-available-solution-stacks` (6认同)
  • 嗨@Gavin,对不起它不适合你.也许有趣的是看到错误消息或其他输出来调试这个? (2认同)
  • 嗨@Ralph,如果在 gem 文件中指定了 ruby​​ 版本,则此解决方案将失败。应用程序无法启动,因为 ruby​​ 版本不匹配,因此恢复了更改。 (2认同)
  • 和@Gavin有同样的问题,首先从Gemfile中删除Ruby版本解决了它 - 现在服务器将从环境中知道Ruby版本 - 然后使用该Gemfile进行部署; 然后运行命令(`aws elasticbeanstalk update-environment --solution-stack-name"64bit Amazon Linux 2016.09 v2.3.2运行Ruby 2.3(Puma)" - environment-name"env"`).之后可以随意重新添加Ruby版本到Gemfile,但请注意它必须与服务器上的版本匹配,例如当前最新版本是2.3.3,但服务器只有2.3.1. (2认同)