Closed2

【Docker × PostgreSQL × Rails】Github Actions で RSpec のテストに落ちまくった話

てりてり

エラー発生

1. could not translate host name "db" to address: Temporary failure in name resolution

「Rails を PostgreSQL のデータベースに接続しようとしたけど、 db ってアドレス見つからんぞ」
と言われました。

解決策

database.yml.cihostlocalhost とすること。

database.yml.ci
test:
   adapter: postgresql
   encoding: utf8
   username: user
   password: password
 # host: db
   host: localhost
   database: app_test

2. connection to server at "127.0.0.1", port 5432 failed: fe_sendauth: no password supplied

「Rails を PostgreSQL のデータベースに接続しようとしたけど、 パスワードないやんけ」
と言われました。

解決策

password に値を追加すること。
MySQL では空でも平気だったのですが、PostgreSQLでは怒られました。

database.yml.ci
test:
  adapter: postgresql
  encoding: utf8
  username: user
# password:
  password: password
  host: localhost
  database: app_test

3. ActiveRecord::AdapterNotFound: Database configuration specifies nonexistent 'postgres' adapter. Available adapters are: mysql2, postgresql, sqlite3, trilogy.

「Adapter が見つからん。postgres adapter なんて存在しません。修正してください。」
と言われました。

解決策

postgrespostgresql とすること。

database.yml.ci
test:
 # adapter: postgres
   adapter: postgresql
   encoding: utf8
   username: user
   password: password
   host: localhost
   database: app_test
てりてり

最終形態

一部コードを省略しています。

compose.yml

services:
  db:
    image: postgres:16.4
    environment:
      POSTGRES_DB: app_development
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
volumes:
  postgres_data:

database.yml

default: &default
  adapter: postgresql
  encoding: utf8
  username: user
  port: 5432
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: app_development
  host: db
  password: password

test:
  <<: *default
  database: app_test
  host: db
  password: password

database.yml.ci

test:
  adapter: postgresql
  encoding: utf8
  username: user
  password: password
  host: localhost
  database: app_test

ci.yml

name: Continuous Integration

on: push

jobs:
  RSpec:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: backend
    services:
      postgres:
        image: postgres:16.4
        env:
          POSTGRES_USER: user
          POSTGRES_PASSWORD: password
          POSTGRES_DB: app_test
        ports:
          - "5432:5432"
        options: >-
          --health-cmd "pg_isready"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 10

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.3.5
          bundler-cache: true

      - name: Cache node modules
        uses: actions/cache@v3
        with:
          path: node_modules
          key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-node-

      - name: Bundler and gem install
        run: |
          gem install bundler
          bundle install --jobs 4 --retry 3 --path vendor/bundle

      - name: Database create and migrate
        run: |
          cp config/database.yml.ci config/database.yml
          bundle exec rails db:create RAILS_ENV=test
          bundle exec rails db:migrate RAILS_ENV=test

      - name: Run rspec
        run: bundle exec rspec
このスクラップは21日前にクローズされました