Closed2
【Docker × PostgreSQL × Rails】Github Actions で RSpec のテストに落ちまくった話
エラー発生
could not translate host name "db" to address: Temporary failure in name resolution
1. 「Rails を PostgreSQL のデータベースに接続しようとしたけど、 db
ってアドレス見つからんぞ」
と言われました。
解決策
database.yml.ci
の host
を localhost
とすること。
database.yml.ci
test:
adapter: postgresql
encoding: utf8
username: user
password: password
# host: db
host: localhost
database: app_test
connection to server at "127.0.0.1", port 5432 failed: fe_sendauth: no password supplied
2. 「Rails を PostgreSQL のデータベースに接続しようとしたけど、 パスワードないやんけ」
と言われました。
解決策
password
に値を追加すること。
MySQL では空でも平気だったのですが、PostgreSQLでは怒られました。
database.yml.ci
test:
adapter: postgresql
encoding: utf8
username: user
# password:
password: password
host: localhost
database: app_test
ActiveRecord::AdapterNotFound: Database configuration specifies nonexistent 'postgres' adapter. Available adapters are: mysql2, postgresql, sqlite3, trilogy.
3. 「Adapter が見つからん。postgres
adapter なんて存在しません。修正してください。」
と言われました。
解決策
postgres
を postgresql
とすること。
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日前にクローズされました