Ruby 运行时允许您在沙盒环境下的 App Engine 中运行您的应用。本文档介绍了 Ruby 运行时环境的详细信息,包括为代码提供的标头以及在 App Engine 上成功部署应用的其他信息。
在 app.yaml
文件中指定适用于标准环境下 App Engine 的 Ruby 运行时:
runtime: rubyVERSION
其中,VERSION 是 Ruby MAJOR
和 MINOR
版本号。例如,如需使用最新的 Ruby 版本 Ruby 3.3,请指定 33
。
如需了解其他受支持的 Ruby 版本以及 Ruby 版本对应的 Ubuntu 版本,请参阅运行时支持时间表。
Ruby 版本
Java 运行时使用 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 服务器,如 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
环境变量
以下环境变量由运行时设置:
环境变量 | 说明 |
---|---|
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 |
与您的应用关联的 Google Cloud 项目 ID。 |
PORT |
接收 HTTP 请求的端口。 |
NODE_ENV (仅在 Node.js 运行时中可用) |
当服务已部署时,将其设置为 production 。 |
您可以在 app.yaml
文件中定义其他环境变量,但不能替换上述值(NODE_ENV
除外)。
HTTPS 和转发代理
App Engine 在负载均衡器上终止 HTTPS 连接,并将请求转发到您的应用。某些应用需要确定原始请求 IP 地址和协议。用户的 IP 地址可在标准 X-Forwarded-For
标头中获取。对于需要此信息的应用,应将其 Web 框架配置为信任代理。
文件系统
运行时包括可写的 /tmp
目录,其他所有目录仅具有只读权限。对 /tmp
执行写入操作会占用系统内存。如需了解详情,请参阅 TempDir
和 TempFile
文档。
元数据服务器
应用的每个实例都可以使用 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/region |
实例运行的区域。 |
/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
发送请求。