0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【エラー備忘録・単純ミス】railsアプリ作成時のpostgresql接続失敗【PG::ConnectionBad: FATAL:】

Posted at

結論

①データベースを作成していなかったことが直接の原因。
②エラー調査のためpostgresqlにログインするときに失敗したのは、ナンバーロックがオフになった状態で数字をテンキーで入力したことが原因と思われる。これがエラー理由を誤信させ、エラーが長引いた原因。

環境

Windows10home
rails5.2.4
postgresql 12.3

状況

RailsアプリのCRUD処理まで実装した後、GitHubに上げるため、database.ymlのユーザーネームとパスワードを平文から環境変数に変更。
環境変数変更に使用したgemはdotenv-rails
その後もビューの確認のため、シード投入やデータベースリセットを繰り返していたが、その中で急にpostgresqlに繋がらなくなった。

Gemfile
gem "dotenv-rails"

上記のbundle installをした後に以下のファイルをRailsアプリ直下に作成。

(railsアプリ名)/.env
DB_USERNAME = psqlのユーザー名を入力
DB_PASSWORD = psqlのパスワードを入力
database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: <%= ENV["DB_USERNAME"] %>
  password: <%= ENV["DB_PASSWORD"] %>

development:
  <<: *default
  database: CRUD_app_development

test:
  <<: *default
  database: CRUD_app_test

production:
  <<: *default
  database: CRUD_app_production
  username: CRUD_app
  password: <%= ENV['CRUD_APP_DATABASE_PASSWORD'] %>

エラー内容
$ rails db:seed
rails aborted!
PG::ConnectionBad: FATAL:  �f�[�^�x�[�X"CRUD_app_development"�͑��݂��܂���    
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:abort_if_pending_migrations
(See full trace by running task with --trace)

文字化けは原文のまま。
このエラー表示の前に、database.ymlの設定ミスによる異なるエラー表示もあったが、ターミナルを閉じたので正確には分からない。
確かパスワードを入力していなかったのが原因だったと思う。

試したこと

環境変数の内容は正しいのか?nilになっていないか → ○ rails cで環境変数を入力して確認
database.ymlのユーザー名とパスワードを平文にして実行 → × 同じエラー
postgresqlにログインしてテーブルを確認する → パスワードを入力しても認証失敗でログインできず。ということは、postgresqlのユーザーネームかパスワードが正しくないことが原因か?

原因

$ rails db:create
Created database 'CRUD_app_development'
Database 'CRUD_app_test' already exists

開発環境だけデータベースが作成されていなかった。
というのも、シードデータ投入とリセットを繰り返す中でデータが完全に消去されなかったため、rails db:dropを実行していた。
そのときはdatabase.ymlの設定でテスト環境にユーザーネームとパスワードをしていなかったので、エラーが発生。
そのエラー内容をよく見ておらず、このときに開発環境のデータベースがドロップされたことに気づかずに作業を進めていた。
登録したパスワードでpostgresqlにログインできなかったため、今回のエラー原因がpostgresqlのユーザー・パスワード設定にあると勘違いしたことがエラーが長引いた原因。

教訓

エラー内容はよく見ましょう。

なお、rails db:create後は、postgresqlにログインできた。
なぜ?データベース作成後でないとpostgresqlにログインできないのはおかしいのではないか。
試しに再度rails db:dropしてログインを試したら普通にログインできた。
予想される原因としては、テンキーで数字を入力しているため、ナンバーロックがオフになった状態で入力したことが考えられる。なんともお粗末な原因。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?