Ruby 執行階段是一種軟體堆疊,負責安裝應用程式程式碼和依附元件,然後在彈性環境中執行該應用程式。
Ruby 版本
Ruby 3.4 使用Buildpack。如需支援的 Ruby 版本完整清單及其對應的 Ubuntu 版本,請參閱「Runtime support schedule」。
如要使用支援的 Ruby 版本,您必須:
在
Gemfile
中指定 Ruby 版本。RUBY VERSION ruby 3.4.x
安裝 420.0.0 以上版本的 gcloud CLI。您可以執行
gcloud components update
指令來更新 CLI 工具。如要查看已安裝的版本,您可以執行gcloud version
指令。在
app.yaml
檔案中指定operating_system
設定:runtime: ruby env: flex runtime_config: operating_system: "ubuntu22"
您也可以在應用程式目錄中使用
.ruby-version
檔案,指定 Ruby 解譯器的版本。例如:3.4.x
舊版本
如要使用 Ruby 執行階段 3.1 以下版本,請在應用程式目錄中使用 .ruby-version
檔案指定 Ruby 解譯器版本。
如果這個檔案存在,當您使用 rbenv 部署應用程式時,執行階段會安裝要求的 Ruby 版本。如果要求的版本無法安裝,App Engine 會在部署期間顯示錯誤訊息。
如果您未提供 .ruby-version
檔案,Ruby 執行階段會預設為 2.7 版。請注意,預設設定隨時可能變更,因此建議您為應用程式指定 Ruby 版本。
支援其他 Ruby 執行階段
如果您需要使用不支援的 Ruby 版本,可以建立自訂執行階段,並選取含有所需 Ruby 版本的有效基礎映像檔。
如需瞭解 Google 提供的基本映像檔或 Docker 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
啟動應用程式。此進入點應啟動程序,在 PORT
環境變數定義的通訊埠回應 HTTP 要求。例如:
entrypoint: bundle exec rails server -p $PORT
大多數網頁應用程式均使用支援 Rack 的網路伺服器,例如 Puma、Unicorn 或 Thin。
您必須在應用程式的 Gemfile
設定檔中,將伺服器新增為依附元件。執行階段會在呼叫進入點之前安裝所有依附元件。
source "https://rubygems.org"
gem "rack"
gem "puma"
針對 Rails 應用程式使用 Puma 的進入點範例如下:
entrypoint: bundle exec rails server Puma -p $PORT
針對任何 Rack 應用程式使用 Puma 的進入點範例如下:
entrypoint: bundle exec rackup -s Puma -p $PORT
如果應用程式不需要 Rack 伺服器即可處理要求,您可以直接執行 Ruby 指令碼:
entrypoint: bundle exec ruby app.rb
環境變數
執行階段環境會設定下列環境變數:
環境變數 | 說明 |
---|---|
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 執行個體讀取該中繼資料。
這個函式範例使用中繼資料伺服器,以取得執行個體的外部 IP 位址。