テストでのタイムゾーン表記を US/Eastern から America/New_York に置換
Rails のテストスイートにおいて、PostgreSQL のタイムゾーン指定に使われていた US/Eastern が IANA tzdata の更新で非推奨となり接続エラーを引き起こしていた。本 PR はその箇所を America/New_York に置き換え、テスト実行時の ActiveRecord::ConnectionNotEstablished を防止するものです。
背景
US/Eastern が PostgreSQL の有効タイムゾーン名から除外されたため、最新ビルドの PostgreSQL(例: Homebrew)でテストを走らせると TimeZone パラメータが無効 となり接続が失敗していました。Issue #57586 で報告された通り、ActiveRecord::ConnectionNotEstablished が発生し CI が落ちるケースが確認されていました。この変更は、広くサポートされている IANA の正規名 America/New_York に置換することで、すべての環境で安定したテスト実行を実現します。
技術的な変更
postgresql_adapter_test.rb の定数更新
テストで使用されている KNOWN_SERVER_DEFAULTS 定数のタイムゾーンオプションが -c TimeZone=US/Eastern から -c TimeZone=America/New_York へ変更されました。これにより、PostgreSQL 接続時に送られる SET TIME ZONE コマンドが有効な名前になるため、接続エラーが解消されます。
- KNOWN_SERVER_DEFAULTS = "-c TimeZone=US/Eastern -c IntervalStyle=postgres -c standard_conforming_strings=on -c client_min_messages=notice"
+ KNOWN_SERVER_DEFAULTS = "-c TimeZone=America/New_York -c IntervalStyle=postgres -c standard_conforming_strings=on -c client_min_messages=notice"
test_case.rb のデフォルトタイムゾーン引数変更
テストユーティリティ with_env_tz のデフォルト引数が "US/Eastern" から "America/New_York" に変更され、環境変数 TZ を設定する際に常に有効なタイムゾーンが使用されます。これにより、テストケース全体で タイムゾーン依存のロジックが期待通りに動作し、ローカル環境でも同様の結果が得られます。
- def with_env_tz(new_tz = "US/Eastern")
+ def with_env_tz(new_tz = "America/New_York")
old_tz, ENV["TZ"] = ENV["TZ"], new_tz
yield
ensure
ENV["TZ"] = old_tz
end
設計判断
この PR は 既存テストコードの文字列リテラルを置換 するシンプルなアプローチを採り、ファイル構造やテストロジックに新たな抽象化層を導入しませんでした。そのため、後方互換性へのリスクは極めて低く、変更の影響範囲はテストコードのみです。また、代替タイムゾーン名をハードコードすることで、外部設定や環境差分による不安定要因を排除し、テストの再現性を向上させています。
まとめ
IANA tzdata の更新で廃止された US/Eastern をテストコード内で America/New_York に置換することで、PostgreSQL 接続時のタイムゾーンエラーを根本的に解消しました。変更はテストファイルの定数とユーティリティメソッドの2か所に限定され、既存機能への影響はなく、安定したテスト実行が維持されます。