使用 Elastic Beanstalk Ruby 平台 - Amazon Elastic Beanstalk
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Elastic Beanstalk Ruby 平台

Amazon Elastic Beanstalk Ruby 平台是一组环境配置,适用于可在 Puma 应用程序服务器下的 NGNIX 代理服务器后方运行的 Ruby Web 应用程序。每个平台分支对应于一个 Ruby 版本。如果使用了 RubyGems,您可以将 Gemfile 文件包含在源代码包中以在部署期间安装程序包。

应用程序服务器配置

Elastic Beanstalk 根据您在创建环境时选择的 Ruby 平台分支安装 Puma 应用程序服务器。有关 Ruby 平台版本提供的组件的更多信息,请参阅 Amazon Elastic Beanstalk 平台指南中的支持的平台

您可以使用自己提供的 Puma 服务器配置应用程序。这样就可选择使用除 Ruby 平台分支预装版本之外的 Puma 版本。您也可以将应用程序配置为使用其他应用程序服务器,例如 Passenger。为此,您必须在部署中包括并自定义 Gemfile。您还需要配置 Procfile 以启动应用程序服务器。有关更多信息,请参阅使用 Procfile 配置应用程序进程

其他配置选项

Elastic Beanstalk 提供了配置选项,可供您用于自定义在 Elastic Beanstalk 环境中的 Amazon Elastic Compute Cloud(Amazon EC2)实例上运行的软件。您可配置应用程序所需的环境变量,启用日志轮换至 Amazon S3,并将应用程序源中包含静态文件的文件夹映射至代理服务器所提供的路径。该平台还预定义了一些与 Rails 和 Rack 相关的常见环境变量,便于发现和使用。

Elastic Beanstalk 控制台中提供了配置选项,可用于修改运行环境的配置。要避免在终止环境时丢失环境配置,可以使用保存的配置来保存您的设置,并在以后将这些设置应用到其他环境。

要保存源代码中的设置,您可以包含配置文件。在您每次创建环境或部署应用程序时,会应用配置文件中的设置。您还可在部署期间使用配置文件来安装程序包、运行脚本以及执行其他实例自定义操作。

在 Elastic Beanstalk 控制台中应用的设置会覆盖配置文件中的相同设置(如果存在)。这让您可以在配置文件中包含默认设置,并使用控制台中的特定环境设置加以覆盖。有关优先顺序和其他设置更改方法的更多信息,请参阅配置选项

有关扩展 Elastic Beanstalk 基于 Linux 的平台的各种方法的详细信息,请参阅扩展 Elastic Beanstalk Linux 平台

配置 Ruby 环境

您可以使用 Elastic Beanstalk 控制台启用到 Amazon S3 的日志轮换,并配置应用程序可从环境中读取的变量。

访问相应环境的软件配置设置
  1. 打开 Elastic Beanstalk 控制台,然后在 Regions(区域)列表中选择您的 Amazon Web Services 区域。

  2. 在导航窗格中,选择 Environments(环境),然后从列表中选择环境的名称。

    注意

    如果您有多个环境,请使用搜索栏筛选环境列表。

  3. 在导航窗格中,选择 Configuration(配置)。

  4. Updates, monitoring, and logging(更新、监控和日志记录)配置类别中,选择 Edit(编辑)。

日志选项

Log options(日志选项)部分有两个设置:

  • Instance profile(实例配置文件)– 指定有权访问与应用程序关联的 Amazon S3 存储桶的实例配置文件。

  • Enable log file rotation to Amazon S3(启用到 Amazon S3 的日志轮换)– 指定是否将应用程序的 Amazon EC2 实例的日志文件复制到与应用程序关联的 Amazon S3 存储桶。

静态文件

为了提高性能,您可以使用 Static files(静态文件)部分配置代理服务器,以便从 Web 应用程序内的一组目录提供静态文件(例如 HTML 或图像)。对于每个目录,您都将虚拟路径设置为目录映射。当代理服务器收到对指定路径下的某个文件的请求时,它将直接提供此文件,而不是将请求路由至您的应用程序。

有关使用配置文件或 Elastic Beanstalk 控制台配置静态文件的详细信息,请参阅 提供静态文件

默认情况下,Ruby 环境中的代理服务器配置为提供静态文件,如下所示:

  • public 文件夹中的文件通过 /public 路径和域根目录(/ 路径)提供。

  • public/assets 子文件夹中的文件通过 /assets 路径提供。

以下示例说明默认配置的工作原理:

  • 如果您的应用程序源代码在名为 public 的文件夹中包含一个名为 logo.png 的文件,则代理服务器将通过 subdomain.elasticbeanstalk.com/public/logo.pngsubdomain.elasticbeanstalk.com/logo.png 将其提供给用户。

  • 如果您的应用程序源代码在 public 文件夹内名为 assets 的文件夹中包含一个名为 logo.png 的文件,则代理服务器将通过 subdomain.elasticbeanstalk.com/assets/logo.png 将其提供给用户。

您可以配置静态文件的其他映射。有关更多信息,请参阅本主题后面的 Ruby 配置命名空间

注意

对于 Ruby 2.7 AL2 版本 3.3.7 之前的平台版本,默认 Elastic Beanstalk nginx 代理服务器配置不支持通过域根目录 (subdomain.elasticbeanstalk.com/) 提供静态文件。此平台版本于 2021 年 10 月 21 日发布。有关更多信息,请参阅 Amazon Elastic Beanstalk 发布说明中的新平台版本 - Ruby

环境属性

环境属性部分,您可以在运行应用程序的 Amazon EC2 实例上指定环境配置设置。环境属性会以密钥值对的形式传递到应用程序。

Ruby 平台为环境配置定义了以下属性:

  • BUNDLE_WITHOUT – 从 Gemfile 安装依赖项时所忽略的组的冒号分隔列表。

  • BUNDLER_DEPLOYMENT_MODE – 设置为 true(默认值)以使用捆绑程序在部署模式下安装依赖项。设置为 false 以在开发模式中运行 bundle install

    注意

    此环境属性未在 Amazon Linux AMI Ruby 平台分支(在 Amazon Linux 2 之前)上定义。

  • RAILS_SKIP_ASSET_COMPILATION – 设置为 true 可在部署期间跳过运行 rake assets:precompile

  • RAILS_SKIP_MIGRATIONS – 设置为 true 可在部署期间跳过运行 rake db:migrate

  • RACK_ENV – 指定 Rack 的环境阶段。例如,developmentproductiontest

在运行于 Elastic Beanstalk 中的 Ruby 环境内,可通过使用 ENV 对象访问环境变量。例如,您可以使用以下代码将名为 API_ENDPOINT 的属性读取到某个变量:

endpoint = ENV['API_ENDPOINT']

参阅 环境属性和其他软件设置 了解更多信息。

Ruby 配置命名空间

您可以使用配置文件设置配置选项并在部署期间执行其他实例配置。配置选项可以通过您使用的 Elastic Beanstalk 服务或平台定义并组织到命名空间 中。

您可以使用 aws:elasticbeanstalk:environment:proxy:staticfiles 命名空间来配置环境代理以提供静态文件。您可以定义虚拟路径到应用程序目录的映射。

Ruby 平台不定义任何特定于平台的命名空间。相反,它为常见的 Rails 和 Rack 选项定义环境属性。

以下配置文件指定一个静态文件选项,该选项将名为 staticimages 的目录映射到路径 /images,设置每个平台定义的环境属性,还设置名为 LOGGING 的附加环境属性。

例 .ebextensions/ruby-settings.config
option_settings: aws:elasticbeanstalk:environment:proxy:staticfiles: /images: staticimages aws:elasticbeanstalk:application:environment: BUNDLE_WITHOUT: test BUNDLER_DEPLOYMENT_MODE: true RACK_ENV: development RAILS_SKIP_ASSET_COMPILATION: true RAILS_SKIP_MIGRATIONS: true LOGGING: debug
注意

BUNDLER_DEPLOYMENT_MODE 环境属性和 aws:elasticbeanstalk:environment:proxy:staticfiles 命名空间未在 Amazon Linux AMI Ruby 平台分支(在 Amazon Linux 2 之前)上定义。

Elastic Beanstalk 提供了许多用于自定义环境的配置选项。除了配置文件之外,您还可使用控制台、保存的配置、EB CLI 或 Amazon CLI 来配置选项。参阅 配置选项 了解更多信息。