Heroku での Ruby アプリケーションの動作
最終更新日 2025年02月12日(水)
Heroku では、純粋な Ruby アプリケーション (headless プロセスや Goliath などのイベント型 Web フレームワーク) は完全にサポートされています。この記事では、それらの動作について説明します。
自動検出
Heroku がデプロイされたアプリを純粋な Ruby アプリケーションと認識すると、デプロイ時に -----> Ruby app detected
と応答します。
$ git push heroku main
-----> Ruby app detected
環境設定
Cloud Native Buildpack を使用するかどうかに応じて、Ruby アプリに次の環境変数を設定します。
クラシック Ruby buildpack の環境設定
GEM_PATH
=>vendor/bundle/#{RUBY_ENGINE}/#{RUBY_ABI_VERSION}
LANG
=>en-us
PATH
=>bin:vendor/bundle/#{RUBY_ENGINE}/#{RUBY_ABI_VERSION}/bin:/usr/local/bin:/usr/bin:/bin
DISABLE_SPRING
=>1
GEM_PATH
は Bundler gem vendor ディレクトリに設定されます。
Ruby Cloud Native Buildpack の環境設定
次の環境変数のデフォルトを設定します。
JRUBY_OPTS="-Xcompile.invokedynamic=false"
- Invoke dynamic は Ruby などの動的型付け言語のサポートを強化することを目的とした JVM の機能です。この設定は Physion Passenger 4.0.16 で問題が発生したため無効になりました (詳細)。この値は上書きできます。RACK_ENV=${RACK_ENV:-"production"}
- Rack ベースの Web サーバーと Web アプリの動作に影響を与える可能性のある環境変数。この値は上書きできます。RAILS_ENV=${RAILS_ENV:-"production"}
- すべての Rails アプリで使用される値。デフォルトでは、Rails にはdevelopment
、test,
、production
の 3 つの環境が付属しています。デプロイするすべてのアプリでproduction
を使用し、staging
などのカスタム環境を使用しないことをお勧めします (詳細)。この値は上書きできます。SECRET_KEY_BASE=${SECRET_KEY_BASE:-<generate a secret key>}
- Rails 4.1 以降のアプリでは、さまざまなものの暗号化トークンを生成するための値です。特に、この値はユーザーセッションの生成に使用されるため、ビルド間でこの値を変更すると、すべてのユーザーがログアウトされることになります。この buildpack はデフォルトで生成された値を提供します。この値は上書きできます。BUNDLE_WITHOUT=development:test
-bundle install
中、development
グループまたはtest
グループ を Bundler にインストールしないように指示します。この値は上書きできます。
環境変数が変更されました。デフォルトのリストに加えて、buildpack は次の環境変数を変更します。
BUNDLE_BIN=<bundle-path-dir>/bin
- すべての gem の実行可能ファイルを指定されたパスにインストールします。BUNDLE_CLEAN=1
- バンドルインストールが正常に完了すると Bundler は自動的にbundle clean
を実行し、Gemfile.lock
で指定されていない、以前のビルドで作成された古い gem をすべて削除します。BUNDLE_DEPLOYMENT=1
-Gemfile.lock
が現在のGemfile
と同期している必要があります。BUNDLE_GEMFILE=<app-dir>/Gemfile
- Bundler にGemfile
の場所を指定します。BUNDLE_PATH=<bundle-path-dir>
- Bundler にこのパスに gem をインストールするように指示しますDISABLE_SPRING= "1"
- Spring は開発の起動時間を短縮することを目的として、プロセスをフォークして操作することでアプリケーションの状態をキャッシュしようとするライブラリです。本番環境でこれを無効にすると、重大な問題が解消されます。詳細は、こちらを参照してください。GEM_PATH=<bundle-path-dir>
- Ruby に gem の場所を指定します。MALLOC_ARENA_MAX=2
-glibc
のメモリ割り当て動作を制御し、Ruby が割り当てるメモリの総量を削減します。詳細は、こちらを参照してください。PATH
- さまざまな実行可能ファイルがインストールされ、PATH
環境設定が変更されるため、システムレベルで実行可能になります。これは主に、libcnb
および CNB レイヤーが提供するインターフェースを介して行われ、直接行われるわけではありません。RAILS_LOG_TO_STDOUT=" enabled"
- Rails 5 以降のアプリケーションのデフォルトのログ出力先をSTDOUT
に設定します (詳細)。RAILS_SERVE_STATIC_FILES=" enabled"
- Rails 5 以降のアプリケーションでActionDispatch::Static
ミドルウェアを有効にし、Puma などの Ruby ウェブサーバーがpublic/assets
にあるような静的ファイルを配信できるようにします。詳細は、こちらを参照してください。
アドオン
2023 年 5 月 15 日より前にアカウントを作成した場合または、Heroku サポートに、アカウントの Heroku Postgres 自動プロビジョニングを有効にするように依頼した場合は、「Ruby データベースの自動プロビジョニング.」を参照してください。
プロセスタイプ
純粋な Ruby アプリケーションが検出された場合、デフォルトの web
プロセスタイプは作成されません。