行動すれば次の現実

テック中心の個人ブログ

Rails+Postgresql+Dockerで発生する「There is an issue connecting to your database with your username/password, username xxx」でハマった件

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と不一致の状態で接続を試みていたことになります。

小一時間ほどハマってしまったので、同じ境遇の方のお役に立てば幸いです。