Ruby 2.6 和 2.7 现已正式推出。

Ruby 运行时环境

Ruby 运行时允许您在沙盒环境下的 App Engine 中运行您的应用。本文档介绍了 Ruby 运行时环境的详细信息,包括为代码提供的标头以及在 App Engine 上成功部署应用的其他信息。

app.yaml 文件中将适用于标准环境下 App Engine 的 Ruby 运行时指定为 ruby27

runtime: ruby27 # or another supported version

Ruby 版本

Ruby 运行时支持 Ruby 2.5、Ruby 2.6 和 Ruby 2.7,并且使用 app.yaml 文件中指定的最新稳定版本。App Engine 会自动更新到新的补丁程序版本,但不会自动更新次要版本。

例如,您的应用可能部署在 Ruby 2.6.0,并在之后的部署中自动更新到 2.6.1 版,但它不会自动更新到 Ruby 2.7。

依赖项

如需详细了解如何声明和管理依赖项,请参阅指定依赖项

应用启动

运行时使用 app.yaml 文件中定义的 entrypoint 来启动应用。entrypoint 应启动一个进程,以响应环境变量 PORT 所定义端口上的 HTTP 请求。例如:

entrypoint: bundle exec rails server -p $PORT

大多数 Web 应用都使用支持 Rack 的 Web 服务器,如 PumaUnicornThin

您必须将服务器作为依赖项添加到应用的 Gemfile 配置文件中。运行时将会在 entrypoint 调用之前安装所有依赖项。

source "https://rubygems.org"

gem "rack"
gem "puma"

在 Rails 应用中使用 puma 时对应的 entrypoint 示例:

entrypoint: bundle exec rails server Puma -p $PORT

在任意 Rack 应用中使用 puma 时对应的 entrypoint 示例:

entrypoint: bundle exec rackup -s Puma -p $PORT

对于可在没有 Rack 服务器的情况下处理请求的应用,您只需执行 ruby 脚本:

entrypoint: bundle exec ruby app.rb

环境变量

以下环境变量由运行时设置:

环境变量 说明
GAE_APPLICATION App Engine 应用的 ID。此 ID 以“region code~”为前缀,例如“e~”(对于在欧洲部署的应用)。
GAE_DEPLOYMENT_ID 当前部署的 ID。
GAE_ENV App Engine 环境。设置为 standard
GAE_INSTANCE 当前运行您的服务的实例的 ID。
GAE_MEMORY_MB 可供应用进程使用的内存量,以 MB 为单位。
GAE_RUNTIME app.yaml 文件中指定的运行时环境。
GAE_SERVICE app.yaml 文件中指定的服务名称。如果未指定服务名称,则将其设置为 default
GAE_VERSION 服务的当前版本标签。
GOOGLE_CLOUD_PROJECT 与您的应用关联的 Cloud 项目 ID。
PORT 接收 HTTP 请求的端口。

您可以app.yaml 文件中定义其他环境变量,但不能替换上述值。

HTTPS 和转发代理

App Engine 在负载平衡器上终止 HTTPS 连接,并将请求转发到您的应用。某些应用需要确定原始请求 IP 地址和协议。用户的 IP 地址可在标准 X-Forwarded-For 标头中获取。对于需要此信息的应用,应将其 Web 框架配置为信任代理。

文件系统

运行时包括可写的 /tmp 目录,其他所有目录仅具有只读权限。对 /tmp 执行写入操作会占用系统内存。如需了解详情,请参阅 TempDirTempFile 文档。

元数据服务器

应用的每个实例都可以使用 App Engine 元数据服务器来查询有关实例和项目的信息。

您可以通过以下端点访问元数据服务器:

  • http://metadata
  • http://metadata.google.internal

发送到元数据服务器的请求必须包含请求标头 Metadata-Flavor: Google。此标头表明请求是为了检索元数据值而发出的。

下表列出了您可以针对特定元数据发出 HTTP 请求的端点:

元数据端点 说明
/computeMetadata/v1/project/numeric-project-id 分配给项目的项目编号。
/computeMetadata/v1/project/project-id 分配给项目的项目 ID。
/computeMetadata/v1/instance/zone 实例运行的区域。
/computeMetadata/v1/instance/service-accounts/default/aliases
/computeMetadata/v1/instance/service-accounts/default/email 分配给项目的默认服务帐号电子邮件地址。
/computeMetadata/v1/instance/service-accounts/default/ 列出项目的所有默认服务帐号。
/computeMetadata/v1/instance/service-accounts/default/scopes 列出默认服务帐号的所有受支持范围。
/computeMetadata/v1/instance/service-accounts/default/token 返回可用于向其他 Google Cloud API 验证您的应用的身份验证令牌。

例如,要检索您的项目 ID,请向 http://metadata.google.internal/computeMetadata/v1/project/project-id 发送请求。