AWS Elastic Beanstalk-如何将现有环境从Ruby 2.1升级到Ruby 2.2 AWS Elastic Beanstalk-无法使用最新平台或从Ruby 2.1到Ruby 2.2的eb升级进行克隆

AWS Elastic Beanstalk-如何将现有环境从Ruby 2.1升级到Ruby 2.2 AWS Elastic Beanstalk-无法使用最新平台或从Ruby 2.1到Ruby 2.2的eb升级进行克隆,ruby,amazon-elastic-beanstalk,ruby-2.1,ruby-2.2,Ruby,Amazon Elastic Beanstalk,Ruby 2.1,Ruby 2.2,我在这件事上撞得头破血流。早在五月份,AWS就宣布他们的Ruby Elastic环境现在提供Ruby-2.2(例如Ruby-2.2-(乘客独立版)或Ruby-2.2-(puma))。我无法将现有的ruby-2.1环境升级到ruby-2.2。看来我必须完全重新创造它们…这看起来很愚蠢?还有其他人经历过吗?我只是错过了一些简单的东西吗 额外信息 几个月来,我一直在我的登台和生产环境中愉快地使用ruby-2.1-(独立乘客版)。现在我想将它们升级到最新的ruby-2.2平台。AWS文档说这很简单,事实

我在这件事上撞得头破血流。早在五月份,AWS就宣布他们的Ruby Elastic环境现在提供Ruby-2.2(例如
Ruby-2.2-(乘客独立版)
Ruby-2.2-(puma)
)。我无法将现有的ruby-2.1环境升级到ruby-2.2。看来我必须完全重新创造它们…这看起来很愚蠢?还有其他人经历过吗?我只是错过了一些简单的东西吗

额外信息 几个月来,我一直在我的登台和生产环境中愉快地使用
ruby-2.1-(独立乘客版)
。现在我想将它们升级到最新的ruby-2.2平台。AWS文档说这很简单,事实上,他们的一些文档甚至表明可以使用
eb克隆--update
。我正在使用的
EB CLI 3.4.5
中不存在该标志:(此外,web控制台有一个带有最新平台选项的克隆菜单项,但它已被禁用

看来,要获得最新的Ruby-2.2实例,我所能做的就是从头开始创建一个全新的环境。这真是太烦人了。

这就是我尝试过的。。。 很好,确认我使用的是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应用程序或工作程序
  • 选择您想要的环境,可能是最新的最好的环境。在我的例子中,使用Ruby-2.2
  • 我选择部署示例应用程序,以便新环境成功
  • 为新环境选择其余选项,然后让它启动
  • 成功启动后,我设置了所有环境变量;例如,所有数据库、smtp、RAILS_ENV/RACK_ENV等。然后我转到以前部署的应用程序,只需将最新的高质量版本部署到全新的环境中


    大家都会同意,这比简单的
    电子商务升级
    .Lame sause.要做的工作多得多。

    我找到了解决方案,使用了(而不是):

    aws cli可与以下设备一起安装:


    我找到了解决这个问题的不同方法

    我的工作方式与上面的注释类似,但我设法更新了现有的beanstalk环境,而不是将代码部署到一个全新的环境

    我采取了以下步骤:

  • 在beanstalk上启动了一个全新的环境,运行我需要的ruby版本2.3(在我的例子中,我需要从ruby 2.2更新到ruby 2.3)
  • SSH插入新实例并安装了我的应用程序所需的所有依赖项(包、开发工具等)-您也可以在.ebextensions目录中执行这些操作
  • 从运行ruby 2.3的实例创建了一个自定义AMI,并安装了所有组件
  • 使用了拉尔夫发布的相同命令,但使用了一些tweek:
  • AMI选项设置对我来说很关键,因为这帮助我安装了ruby 2.3.7的AMI,用于在现有环境中启动新实例。
    以前,我只是按拉尔夫的建议命令,但每次都失败了。

    值得一提的是,几个月前,我曾试图为彪马创造一个新的环境,结果发现这件事完全失败了。当我回到乘客席时,它才起作用。不知道为什么这个问题从-1票开始……蹩脚的酱汁。嗨@Gavin,对不起,它不起作用了对于您来说。可能会看到错误消息或其他输出来调试此问题?您好@Ralph,如果在gem文件中指定了ruby版本,此解决方案将失败。应用程序无法启动,因为ruby版本不匹配,因此恢复了更改。使用此方法成功地从ruby 2.2更新到2.3。与@G有相同的问题avin首先从Gemfile中删除Ruby版本——现在服务器将从环境中知道Ruby版本——然后使用该Gemfile进行部署;然后运行命令(
    aws elasticbeanstalk update environment——解决方案堆栈名“64位Amazon Linux 2016.09 v2.3.2运行Ruby 2.3(Puma)”--环境名称“env”
    )。之后,可以将Ruby版本重新添加到GEM文件中,但请注意,该版本必须与其服务器上的版本相匹配,例如,当前最新版本为2.3.3,但服务器上只有2.3.1。对于查找所有可用解决方案堆栈名称的用户,可以运行以下命令
    aws elasticbeanstalk list available solution stacks
    $ 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)
    
    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"
    
    brew install awscli
    
    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"