AWS Elastic Beanstalk - 如何将现有环境从 Ruby 2.1 升级到 Ruby 2.2
AWS Elastic Beanstalk - How To Upgrade Existing Environment from Ruby 2.1 to Ruby 2.2
AWS Elastic Beanstalk - 无法使用最新平台 或 eb upgrade
从 Ruby 2.1 克隆到 Ruby 2.2
我一直在为这个问题绞尽脑汁。早在 5 月,AWS 就宣布他们的 Ruby 弹性环境现在提供 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)
。现在我想 将它们升级 到最新的 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
很好,确认我正在使用 Ruby 2.1。所以让我们尝试升级:
$ eb upgrade
Environment already on most recent platform version.
好的,那很好,那么平台本身呢:
$ 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)
因此 新环境 将利用 Ruby-2.2 版本。太好了,但是我真的必须淘汰我已经配置的 Ruby-2.1 版本来代替新创建的 Ruby-2.1 版本吗?来吧?
我对这一挑战的解决方案是:
- 启动一个全新的环境。
- 创建 Web 应用程序或 Worker。
- 选择您想要的环境,可能是最新的最好的。在我的例子中, Ruby-2.2.
的乘客
- 我选择部署示例应用程序,以便新环境成功。
- 为您的新环境选择其余选项并启动它。
成功启动后,我设置了所有环境变量;例如我所有的数据库、smtp、RAILS_ENV/RACK_ENV 等。然后我转到我以前部署的应用程序,并将我最新的质量版本简单地部署到全新的环境中。
人们会同意,这比简单的 eb upgrade
要多得多。跛脚酱.
我找到了一个解决方案,使用 aws cli (NOT the 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"
aws cli 可以安装 homebrew:
brew install awscli
我找到了解决这个问题的不同方法。
我的工作方式与上面的评论类似,但我设法更新了现有的 beantalk 环境,而不是将代码部署到一个全新的环境。
我执行的步骤:
- 在 beantalk 运行 上启动了一个全新的环境,我需要的 ruby 版本 2.3(在我的情况下,我需要从 Ruby 2.2 更新到 Ruby 2.3)
- 通过 SSH 连接到新实例并安装我的应用程序需要的所有依赖项(程序包、开发工具等)——您也可以在 .ebextensions 目录中执行这些操作
- 从实例创建自定义 AMI 运行 ruby 2.3 并安装所有内容
- 使用了 Ralph 发布的相同命令,但有一些 tweeks:
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,用于启动新实例现有的环境。
以前只是按 Ralph 建议的命令每次尝试都失败。
AWS Elastic Beanstalk - 无法使用最新平台 或 eb upgrade
从 Ruby 2.1 克隆到 Ruby 2.2
我一直在为这个问题绞尽脑汁。早在 5 月,AWS 就宣布他们的 Ruby 弹性环境现在提供 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)
。现在我想 将它们升级 到最新的 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
很好,确认我正在使用 Ruby 2.1。所以让我们尝试升级:
$ eb upgrade
Environment already on most recent platform version.
好的,那很好,那么平台本身呢:
$ 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)
因此 新环境 将利用 Ruby-2.2 版本。太好了,但是我真的必须淘汰我已经配置的 Ruby-2.1 版本来代替新创建的 Ruby-2.1 版本吗?来吧?
我对这一挑战的解决方案是:
- 启动一个全新的环境。
- 创建 Web 应用程序或 Worker。
- 选择您想要的环境,可能是最新的最好的。在我的例子中, Ruby-2.2. 的乘客
- 我选择部署示例应用程序,以便新环境成功。
- 为您的新环境选择其余选项并启动它。
成功启动后,我设置了所有环境变量;例如我所有的数据库、smtp、RAILS_ENV/RACK_ENV 等。然后我转到我以前部署的应用程序,并将我最新的质量版本简单地部署到全新的环境中。
人们会同意,这比简单的 eb upgrade
要多得多。跛脚酱.
我找到了一个解决方案,使用 aws cli (NOT the 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"
aws cli 可以安装 homebrew:
brew install awscli
我找到了解决这个问题的不同方法。
我的工作方式与上面的评论类似,但我设法更新了现有的 beantalk 环境,而不是将代码部署到一个全新的环境。
我执行的步骤:
- 在 beantalk 运行 上启动了一个全新的环境,我需要的 ruby 版本 2.3(在我的情况下,我需要从 Ruby 2.2 更新到 Ruby 2.3)
- 通过 SSH 连接到新实例并安装我的应用程序需要的所有依赖项(程序包、开发工具等)——您也可以在 .ebextensions 目录中执行这些操作
- 从实例创建自定义 AMI 运行 ruby 2.3 并安装所有内容
- 使用了 Ralph 发布的相同命令,但有一些 tweeks:
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,用于启动新实例现有的环境。 以前只是按 Ralph 建议的命令每次尝试都失败。