Heroku での Ruby の動作
最終更新日 2025年02月12日(水)
Table of Contents
Heroku プラットフォームと Ruby buildpack では、デプロイされたあらゆる種類の Ruby アプリケーションに対して次の動作が行われます。より正式な詳細は、クラシック Ruby buildpack または Ruby Cloud Native buildpack の仕様を参照してください。
特定の種類の Ruby アプリに関連する動作については、純粋な Ruby、Rails、Rack ベースのアプリに関する記事を参照してください。
自動検出
Heroku 上の Ruby アプリケーションは、使用する正しい buildpack を自動検出できるように、ルートディレクトリに Gemfile.lock
を含める必要があります。アプリケーションに gem 依存関係がない場合であっても、アプリに gem 依存関係がないことを記載した空の Gemfile
を含む必要があります。
クラシック buildpack による自動検出
[クラシック buildpack](buildpacks#classic-buildpacks) では、次のファイルの存在によって決定される、デプロイされたアプリケーションの種類に応じて特定のアクションを実行します。 * `Gemfile` ([Ruby アプリケーション](ruby-app-behavior) の場合) * `config.ru` ([Rack アプリケーション](rack-app-behavior) の場合) * `config/environment.rb` ([Rails 2 アプリケーション](rails-2-behavior) の場合) * `config/application.rb` (`Rails::Application` 文字列を含む [Rails 3 アプリケーション](rails-3-behavior)の場合)環境設定
すべての Ruby アプリで [Ruby アプリケーションの動作](ruby-app-behavior#config-vars)に記載されている環境変数を設定します。 さらに、[Rack アプリケーションの動作](rack-app-behavior#config-vars)と [Rails アプリケーションの動作](rails-app-behavior)に記載されている Rack および Rails アプリケーション用の追加変数を設定します。インストールされている Bundler バージョン
Heroku プラットフォームでは、Ruby アプリケーションの管理と実行に特定のライブラリセットを使用します。Ruby buildpack は、`Gemfile.lock` の `BUNDLED WITH` キーに記載されたメジャーバージョンとマイナーバージョンに基づいて Bundler のバージョンをインストールします。 `BUNDLED WITH 1.x` は `bundler 1.17.3` をインストール `BUNDLED WITH 2.0.x to 2.3.x` は `bundler 2.3.25` をインストール `BUNDLED WITH 2.4.x` は `bundler 2.4.22` をインストール `BUNDLED WITH 2.5.x` は `bundler 2.5.6` をインストール `Gemfile.lock` に `BUNDLED WITH` キーがない場合は、以下の[デフォルトバージョン](ruby-support)を使用します。 特定のバージョンのみをサポートする理由の詳細については、[Bundler のバージョン](bundler-version)を参照してください。使用可能な設定について詳しくは、[Bundler 設定](bundler-configuration)を参照してください。利用可能なプロセスタイプ
次の 2 つのプロセスタイプはいつでも使用できます。 “` rake: bundle exec rake console: bundle exec irb ”`Cloud Native Buildpack アプリのプロセスタイプ
railties
gem を含むアプリケーションの場合:
- Web プロセスはデフォルトで
bin/rails server
に設定され、-p $PORT
および-e $RAILS_ENV"
が指定されます。このデフォルト設定は、Procfile
を使用して上書きできます。
railties
gem が見つからないが、rack
gem が存在し、ルートに config.ru
ファイルがある場合:
- Web プロセスはデフォルトで
rackup
に設定され、-p $PORT
および-h 0.0.0.0
が指定されます。このデフォルト設定は、Procfile
を使用して上書きできます。
Ruby アプリのビルド動作
クラシック buildpack を使用したビルド
アプリケーションがデプロイされるとき、config
ディレクトリと環境変数 RAILS_ENV
または RACK_ENV
が存在する場合、ビルドフェーズによって、基盤の Rack または Rail アプリケーションがプロビジョニング済みデータベースを使用するように設定されます。
Rails 4.1+ で使われる ActiveRecord 4.1 より前では、database.yml
ファイルが作成されます。既存の database.yml
ファイルが置き換えられます。database.yml
ファイルは、DATABASE_URL
環境変数を構文解析することによって出力を動的に作成する Ruby コードとして作成されます。
ActiveRecord 4.1 以降では DATABASE_URL
サポートが組み込まれています。詳しくは、データベース接続の設定 および DATABASE_URL
サポートを追加したプルリクエストを参照してください
ビルドの最後に rails runner
インターフェースを使用して、潜在的に問題のあるアプリケーション設定がないかチェックします。
JRuby
JRuby の場合、環境変数 JRUBY_BUILD_OPTS
を設定することによってビルド中に JVM に渡されるオプションをカスタマイズできます。一般的な値は --dev
で、これは Bundler および Rake によって実行されるもののような短いプロセスのランタイムを最適化します。
Cloud Native Buildpack を使用したビルド
アプリケーションが rake assets:precompile
タスクを指定している場合、そのタスクが実行されます。ビルダーは指定された環境変数を使用して rake -P
を実行してタスクを検出します。アプリケーションで rake assets:precompile:clean
タスクが指定されている場合、assets:precompile
が正常に呼び出された後に呼び出されます。
一部のアプリケーションやライブラリでは、モンキーパッチまたは Rake::Task#enhance
を呼び出して、この assets:precompile
タスクを変更する場合があります。たとえば古いバージョンの Rails では、この手法を使用して yarn install
を呼び出していました。これらの設定タスクやヘルパータスクを手動で呼び出すことはありません。rake assets:precompile
がアプリケーションのアセットを構築するために必要なものをすべて呼び出すことを想定しています。別の buildpack (heroku/nodejs
buildpack) を使用して、事前にそれらをインストールするようにアプリケーションを設定することもできます。
特定の Ruby アプリケーションの動作
特定の種類の Ruby アプリに関連する動作については、次の記事を参照してください。