GitHub Actions にて Rails で PostgreSQL を使おうとした際に PostgeSQL に接続できなくてハマった話

前提

  • GitHub Actions であることや Rails であることは本質的には関係ありません

結論(注意するところ)

services 配下の postgres において、env で指定する環境変数の「キー」は予約語(決められた語)であること

  • POSTGRES_USERPOSTGRES_PASSWORD です
  • これは当該コンテナがそうなっているからです
    • コンテナによって命名は異なるので、ドキュメントの確認は必須です
  • データベースを使う全ての step において、それぞれにホストを設定する必要があります

具体的にこの部分は下記のような YAML になります。

    services:
      postgres:
        image: postgres:11.2
        ports:
          - 5432:5432
        env:
          POSTGRES_USER: WATASHI_NO_NAMAE
          POSTGRES_PASSWORD: WATASHI_NO_PASSWORD
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

db:migratedb:seed などで PostgreSQL に接続する際には、 ホストとして postgres という予約後(決められた語)を指定すること

  • localhost ではなく postgres です
    • これも当該コンテナのホスト名の仕様によります

具体的にこの部分は下記のような YAML になります。

    - name: $ bundle exec rails db:migrate を行う
      run: |
        bundle exec rails db:migrate
      env:
        PG_HOST: postgres
        RAILS_ENV: test

上記の指定語以外は config/database.yml に従う

これまでに書いた内容は指定語です。それ以外の語の命名は自由ですが、上記の指定語と整合性をもたせて書く必要があります。config/database.yml に丁寧に書きます。

感想

地味にハマりました……。

Powered by はてなブログ