Ruby アプリケーションを構築する

Ruby のバージョンの指定

Buildpack プロジェクトは、Ruby の現在のリリースと Active LTS リリースをサポートしています。古いリリースの Ruby も使用できますが、プロジェクトで積極的にメンテナンスされていない可能性があります。

Gemfile.lock の使用

アプリケーションで Bundler を使用する場合は、リポジトリのルートに Gemfile.lock が必要です。Ruby Buildpack は、Gemfile.lock にロックされたバージョンを自動的に使用します。たとえば、Gemfile.lock に次のようなエントリがあるとします。

RUBY VERSION
  ruby 3.0.3p0

Buildpack は、最新のパッチレベルを含む 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 を使用している場合は、RUBY VERSION の下にある Gemfile.lock で指定されたバージョンをオーバーライドするために GOOGLE_RUNTIME_VERSION を使用することはできません。

依存関係のインストール

Bundler の使用

  • Bundler はデフォルトのパッケージ マネージャーです
  • ロックファイルを使用してアプリをビルドするため、リポジトリに Gemfile.lock を commit します。
  • デフォルトでは、本番環境の依存関係のみがインストールされます。

Bundler のバージョン

Bundler には、互換性に関する問題が報告されています。アプリケーションで Bundler を使用する場合は、Ruby と Rubygems とのさまざまな互換性の問題により、サポートされている 2 つのバージョンのいずれかを使用するように、ビルドされたアプリの Gemfile.lock が更新されます。BUNDLED WITH で Bundler 1.* と 2.* を使用するすべてのアプリケーションは、Bundler 1.17.3 と 2.3.15 を使用するように正規化されています。

エントリポイントの指定

Procfile の使用

entrypoint(コンテナの起動時に実行されるコマンド)を指定するには、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 を設定します。