Rails.app.revisionが環境変数REVISIONに対応
この変更により、Rails.app.revisionがENV["REVISION"]を優先的に参照するようになりました。これにより、デプロイメントプロバイダーが設定する環境変数を直接利用でき、REVISIONファイルの作成やGitリポジトリの同梱が不要になります。
背景
多くのデプロイメントプロバイダーは、アプリケーションのリビジョン情報を環境変数として提供しています。しかし、これまでのRails.app.revisionは環境変数を参照せず、REVISIONファイルまたはGitリポジトリからのみリビジョン情報を取得していました。そのため、環境変数で提供されるリビジョン情報を利用するには、デプロイ時にREVISIONファイルを生成する追加のステップが必要でした。
#56742は、環境変数を優先的に参照することで、この追加ステップを不要にしています。デプロイメントプロバイダーが設定するENV["REVISION"]を直接利用できるようになり、デプロイメントフローがシンプルになります。
技術的な変更
railties/lib/rails/application.rbのrevisionメソッドが拡張され、REVISIONファイルを読む前にENV["REVISION"]をチェックするようになりました。
変更前:
def revision
unless @revision_initialized
@revision = begin
root.join("REVISION").read.strip.presence
rescue SystemCallError
# git rev-parseへのフォールバック
end
@revision_initialized = true
end
@revision
end
変更後:
def revision
unless @revision_initialized
@revision = begin
ENV["REVISION"].presence ||
root.join("REVISION").read.strip.presence
rescue SystemCallError
# git rev-parseへのフォールバック
end
@revision_initialized = true
end
@revision
end
優先順位は以下の通りです:
-
config.revision(明示的な設定) -
ENV["REVISION"](環境変数) -
REVISIONファイル -
git rev-parse HEAD(Gitリポジトリ)
config.revisionで明示的に設定されている場合、それが最優先されます。設定されていない場合のみ、ENV["REVISION"]、REVISIONファイル、Gitリポジトリの順にフォールバックします。
設計判断
既存の優先順位を維持しつつ環境変数を挿入する方式が採用されました。
config.revisionによる明示的な設定は引き続き最優先されます。この設計により、開発環境やテスト環境で特定のリビジョン値を設定する既存の使い方が保護されます。ENV["REVISION"]は、config.revisionが未設定の場合の最初の候補として追加され、REVISIONファイルやGitリポジトリよりも優先されます。
テストでは3つのシナリオがカバーされています:
-
ENV["REVISION"]のみが設定されている場合 -
ENV["REVISION"]とREVISIONファイルの両方が存在する場合(環境変数が優先) -
config.revisionとENV["REVISION"]の両方が設定されている場合(configが優先)
この優先順位の設計により、既存のデプロイメントフローを壊すことなく、環境変数による設定という新しい選択肢を追加しています。
本PRは、デプロイメントプロバイダーとの統合を簡素化する変更です。環境変数の優先参照により、REVISIONファイルの生成やGitリポジトリの同梱が不要になり、多くのデプロイメント環境で追加の設定なしにリビジョン追跡が機能するようになります。