"establish_connection :outer_database" の記述により CI で データベース接続エラーが出て 6時間 溶かした

状況

Rails にて外部データベース(複数データベース)を用いている状況で CI*1 で RSpec を回そうとしました。すると、データベース接続エラーがどうやっても解消できず、6時間溶かしました*2

結論(解決方法)

モデルのファイル中に establish_connection :outer_database などと記述がある場合には、outer_database の接続設定をしてやる必要がある。RSpecの実行時に接続を試みるので、接続ができない時点でエラーになる。

補足

現実的には外部DBに接続して CI を回すということはないと思うので、例えば以下のように分岐させるのが一つの手段かと思います。

  establish_connection :tweet_storage unless ENV['CI'] == 'true'

余談

必死になって CI と戦った様子。

gyazo.com

当初はエラーメッセージがいつもの接続エラーのメッセージだった

gyazo.com

あるユーザのアクションを試してみたらたまたま原因詳細が出た

gyazo.com

*1:GitHub Actions

*2:状況がやや特殊なのでググっても出てこない。エラーメッセージも接続失敗の旨しか当初は出てこなかった

Powered by はてなブログ