Ruby 运行时是负责安装应用代码和依赖项,然后在柔性环境中运行该应用的软件栈。
3.2
版使用 Buildpack 构建,要求您在app.yaml
文件中选择操作系统。例如,如需使用 Ruby 3.2,您必须指定 Ubuntu 22 作为操作系统。3.1
及更低版本使用 Docker 构建。
如需查看受支持的 Ruby 版本及其对应 Ubuntu 版本的完整列表,请参阅运行时支持时间表。
解析器
新运行时版本
对于 3.2 版,您必须在 app.yaml
文件中添加 runtime_config
和 operating_system
设置以指定操作系统。
如需使用 Ruby 3.2 版,您必须执行以下操作:
在
Gemfile
中指定 Ruby 版本。RUBY VERSION ruby 3.2.x
安装 gcloud CLI 420.0.0 或更高版本。您可以通过运行
gcloud components update
命令来更新 CLI 工具。如需查看已安装的版本,您可以运行gcloud version
命令。在
app.yaml
文件中指定operating_system
设置:runtime: ruby env: flex runtime_config: operating_system: "ubuntu22"
(可选)您可以使用应用目录中的 .ruby-version
文件指定 Ruby 解释器版本。例如,
先前版本
对于 Ruby 3.1 及更低版本的运行时,请使用应用目录中的 .ruby-version
文件指定 Ruby 解释器版本。
如果此文件存在,运行时将在您部署应用时使用 rbenv 来安装所指定的 Ruby 版本。如果无法安装所指定的版本,App Engine 会在部署期间显示错误消息。
如果您未提供 .ruby-version
文件,则 Ruby 运行时默认为 2.7 版。请注意,默认版本可能随时更改,因此建议您的应用指定 Ruby 版本。
依赖项
在启动应用之前,运行时会在应用的源目录中查找 Gemfile
文件,并使用 Bundler
安装所有依赖项。如需详细了解如何声明和管理软件包,请参阅使用 Ruby 库。
将 C 语言库与 Ruby 结合使用
对于需要 C 扩展程序的 Ruby 库,系统中预先安装了当前 Ruby 版本的头文件和以下 Ubuntu 软件包。
autoconf
build-essential
ca-certificates
cmake
curl
file
git
imagemagick
libcurl3
libcurl3-gnutls
libcurl4-openssl-dev
libffi-dev
libgdbm-dev
libgit2-dev
libgmp-dev
libicu-dev
libjemalloc-dev
libjemalloc1
libmagickwand-dev
libmysqlclient-dev
libncurses5-dev
libpq-dev
libqdbm-dev
libreadline6-dev
libsqlite3-dev
libssl-dev
libxml2-dev
libxslt-dev
libyaml-dev
libz-dev
systemtap
tzdata
这些软件包支持安装最热门的 Ruby 库。如果您的应用需要其他操作系统级依赖项,您将需要使用基于此运行时的自定义运行时来安装相应的软件包。
应用启动
运行时使用 app.yaml
文件中定义的 entrypoint
来启动应用。entrypoint 应启动一个进程,以响应环境变量 PORT
所定义端口上的 HTTP 请求。例如:
entrypoint: bundle exec rails server -p $PORT
大多数 Web 应用都使用支持 Rack 的 Web 服务器,如 Puma、Unicorn 或 Thin。
您必须将服务器作为依赖项添加到应用的 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
扩展运行时
您可以使用自定义运行时为 App Engine 柔性环境中运行的 Ruby 应用添加额外功能。如需配置自定义运行时,请将 app.yaml
文件中的以下行:
runtime: ruby
替换为以下行:
runtime: custom
您还必须在 app.yaml
文件所在的目录中添加 Dockerfile
和 .dockerignore
文件。
请参阅自定义运行时文档,了解如何在自定义运行时中定义 Dockerfile。
环境变量
以下环境变量由运行时环境设置:
环境变量 | 说明 |
---|---|
GAE_INSTANCE |
当前实例的名称。 |
GAE_MEMORY_MB |
可供应用进程使用的内存量。 |
GAE_SERVICE |
在应用的 app.yaml 文件中指定的服务名称,如果未指定服务名称,则设置为 default 。 |
GAE_VERSION |
当前应用的版本标签。 |
GOOGLE_CLOUD_PROJECT |
与您的应用关联的项目 ID,可在 Google Cloud 控制台中查看 |
PORT |
将接收 HTTP 请求的端口。 |
RACK_ENV |
设置为 production 。 |
RAILS_ENV |
设置为 production 。 |
RAILS_SERVE_STATIC_FILES |
设置为 true 。 |
您可以使用 app.yaml
设置其他环境变量。
元数据服务器
应用的每个实例都可以使用 Compute Engine 元数据服务器来查询有关实例的信息,包括实例的主机名、外部 IP 地址、实例 ID、自定义元数据和服务账号信息。App Engine 不支持为每个实例设置自定义元数据,但您可以设置项目范围的自定义元数据并从 App Engine 和 Compute Engine 实例中读取这些元数据。
此示例函数使用元数据服务器来获取运行 Ruby 运行时 3.1 版及更低版本的实例以及运行 3.2 版及更高版本的实例的外部 IP 地址。请注意,您必须更新 app.yaml
文件才能使用新版本。如需详细了解如何使用新版运行时,请参阅 Ruby 运行时。