建構 Ruby 應用程式

指定 Ruby 版本

Buildpack 專案支援 Ruby 的目前版本和 Active LTS 版本。舊版 Ruby 也提供,但可能不會由專案主動維護。

正在使用 Gemfile.lock

如果應用程式使用 Bundler,則應在存放區的根目錄中放置 Gemfile.lock。Ruby 建構包會自動使用 Gemfile.lock 中鎖定的版本。舉例來說,假設 Gemfile.lock 包含以下內容:

RUBY VERSION
  ruby 3.0.3p0

建構包會自動使用 Ruby 3.0.3 和最新的修補程式等級。

正在使用 GOOGLE_RUNTIME_VERSION

如果您未使用 bundler,可以使用環境變數指定 Ruby 版本,如下所示:

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

您也可以使用 project.toml 專案描述元,為專案檔案和環境變數編碼。請參閱使用環境變數建構應用程式的操作說明。

如果您使用的是 Bundler,GOOGLE_RUNTIME_VERSION 就無法用於覆寫 RUBY VERSION 下 Gemfile.lock 中指定的版本。

安裝依附元件

使用 Bundler

  • Bundler 是預設套件管理員
  • 由於我們使用鎖定檔案建構應用程式,因此請將 Gemfile.lock 提交至您的存放區
  • 根據預設,系統只會安裝正式版依附元件

Bundler 版本

Bundler 有已知的相容性問題。如果應用程式使用 Bundler,由於 Ruby 和 Rubygems 之間存在各種相容性問題,我們會更新已建構應用程式中的 Gemfile.lock,以便使用兩個支援版本中的其中一個。凡是在 BUNDLED WITH 中使用 bundler 1.* 和 2.* 的應用程式,都會經過正規化,改用 bundler 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=60 會為 bundle 指令設定 --timeout=60