构建 Ruby 应用

指定 Ruby 版本

Buildpack 项目支持当前版本和活跃 LTS 版本的 Ruby。旧版 Ruby 也可以使用,但项目可能不会对旧版本主动进行维护。

使用 Gemfile.lock

如果应用使用捆绑器,则应在代码库的根目录中包含 Gemfile.lock。Ruby Buildpack 将自动使用 Gemfile.lock 中锁定的版本。例如,如果您的 Gemfile.lock 包含以下版本:

RUBY VERSION
  ruby 3.0.3p0

Buildpack 会自动使用具有最新补丁程序级别的 Ruby 3.0.3。

使用 GOOGLE_RUNTIME_VERSION

如果您未使用捆绑器,则可以使用环境变量指定 Ruby 版本,如下所示:

pack build --builder=gcr.io/buildpacks/builder \
   sample-ruby \
   --env GOOGLE_RUNTIME_VERSION=3.0.3

您还可以使用 project.toml 项目描述符对环境变量以及项目文件进行编码。请参阅使用环境变量构建应用中的说明。

如果您使用捆绑器,则不能使用 GOOGLE_RUNTIME_VERSION 替换 Gemfile.lock 中的 RUBY VERSION 下指定的版本。

安装依赖项

使用捆绑器

  • 捆绑器是默认的软件包管理器
  • Gemfile.lock 提交到您的代码库,因为我们会使用 lock 文件来构建应用
  • 默认仅安装生产依赖项

捆绑器版本

捆绑器存在已知的兼容性问题。如果您的应用使用捆绑器,由于与 Ruby 和 Rubygem 之间存在各种兼容性问题,我们会更新所构建应用中的 Gemfile.lock 以使用两个受支持的版本中的一个版本。在 BUNDLED WITH 中使用捆绑器 1.* 和 2.* 的所有应用都会标准化为使用捆绑器 1.17.3 和 2.3.15。

指定入口点

使用 Procfile

您可以使用 Procfile 指定入口点(即在容器启动时运行的命令)。例如,在应用根目录的 Procfile 中包含以下内容:

web: ruby main.rb

Ruby Buildpack 将使用 ruby main.rb 命令作为所构建容器的入口点。默认情况下,系统会使用 Procfile 中的 web 目标。

若要使用其他入口点,您可以在 Procfile 中将其他目标指定为参数。

对于包含以下内容的 Procfile: web: ruby main.rb custom: ruby custom.rb

您可以通过将自定义 Procfile 目标作为参数传递来使用该目标:bash pack build --builder=gcr.io/buildpacks/builder \ sample-ruby \ --entrypoint=custom

使用 GOOGLE_ENTRYPOINT

如果您未使用 Procfile,或者想要替换 Procfile,您可以使用 GOOGLE_ENTRYPOINT 环境变量来指定入口点。示例如下:

pack build --builder=gcr.io/buildpacks/builder \
   sample-ruby \
   --env GOOGLE_ENTRYPOINT="ruby custom.rb"

环境变量

Ruby Buildpack 支持使用以下环境变量来自定义容器

BUNDLE_

请参阅 bundler 文档

示例:BUNDLE_TIMEOUT=60bundle 命令设置 --timeout=60