Rails、Postgresqlの構成でdocker composeによる開発環境を構築していたところ、RailsからDBに接続する際に、以下のエラーが発生しました。
There is an issue connecting to your database with your username/password, username: app. Please check your database configuration to ensure the username/password are valid. Couldn't create 'app_development' database. Please check your configuration. rails aborted! ActiveRecord::DatabaseConnectionError: There is an issue connecting to your database with your username/password, username: app. Please check your database configuration to ensure the username/password are valid.
このエラーが発生する場合、database.ymlにusernameやpasswordを設定し忘れているケースがほとんどです。
実際に私の環境では以下のような設定になっておりました。
# database.yml default: &default adapter: postgresql encoding: utf8 host: db pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: app password: password development: <<: *default database: app_development
# docker-compose.yml(dbの部分のみ抜粋) db: image: postgres:13.6 volumes: - postgres:/var/lib/postgresql/data ports: - "5432:5432" environment: POSTGRES_USER: app POSTGRES_PASSWORD: password POSTGRES_DB: app_development TZ: "Asia/Tokyo" POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
volumeを初期化したら解決
設定自体は正しそうでしたので、DBが記録されているvolumeを削除してみることにしました。
$ docker volume ls ・・省略 local app_postgres ・・省略 $ docker volume rm app_postgres
$ docker-compose up -d -build
volumeを削除後にもう一度docker-composeで起動してみたところ、エラーが発生せずに正常にアプリとDBが接続することができました。
なぜvolumeを初期化することで解決できたかというと、database.ymlのusernameをdocker-composeの初期起動時から変更してしまったためです。
docker-compose.yml(dbの部分のみ抜粋)
db: image: postgres:13.6 volumes: - postgres:/var/lib/postgresql/data ports: - "5432:5432" environment: POSTGRES_USER: sample # ← sampleという名前で構築して後からappに変更した
そのため、実質的には、docker-composeでの初期起動時に記載されたusernameとdatabase.ymlに記載されたusernameと不一致の状態で接続を試みていたことになります。
小一時間ほどハマってしまったので、同じ境遇の方のお役に立てば幸いです。