Ruby ランタイムは、アプリケーションのコードと依存関係をインストールして、フレキシブル環境でそのアプリケーションを実行する役割を果たすソフトウェア スタックです。
Ruby のバージョン
Ruby 3.3 は Buildpack を使用します。サポートされている Ruby のバージョンと、それに対応する Ubuntu のバージョンの完全なリストについては、ランタイム サポート スケジュールをご覧ください。
サポートされている Ruby バージョンを使用するには、次のことを行う必要があります。
Gemfile
で Ruby のバージョンを指定します。RUBY VERSION ruby 3.3.x
gcloud CLI バージョン 420.0.0 以降をインストールします。CLI ツールを更新するには、
gcloud components update
コマンドを実行します。インストールされているバージョンを表示するには、gcloud version
コマンドを実行します。app.yaml
ファイルでoperating_system
設定を指定します。runtime: ruby env: flex runtime_config: operating_system: "ubuntu22"
必要に応じて、アプリケーション ディレクトリの
.ruby-version
ファイルを使用して、Ruby インタープリタのバージョンを指定できます。例:3.3.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 ライブラリの使用をご覧ください。
Ruby での C ライブラリの使用
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
大部分のウェブ アプリケーションは、Puma、Unicorn、Thin など、Rack 対応のウェブサーバーを使用します。
アプリケーションの 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。この ID は、Google Cloud Console に表示されます。 |
PORT |
HTTP リクエストを受信するポート。 |
RACK_ENV |
production に設定します。 |
RAILS_ENV |
production に設定します。 |
RAILS_SERVE_STATIC_FILES |
true に設定します。 |
app.yaml
で、追加の構成変数を設定できます。
メタデータ サーバー
アプリケーションの各インスタンスは、ホスト名、外部 IP アドレス、インスタンス ID、カスタム メタデータ、サービス アカウント情報など、インスタンスに関する情報を Compute Engine メタデータ サーバーから取得します。App Engine では、インスタンスごとにカスタム メタデータを設定することはできませんが、プロジェクト単位のカスタム メタデータを設定して、App Engine インスタンスや Compute Engine インスタンスから読み取ることができます。
次のサンプル関数では、メタデータ サーバーからインスタンスの外部 IP アドレスを取得します。