質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.48%

【EC2】Postgresqlの接続エラー

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,026

score 32

したいこと
EC2にデプロイしたアプリ上でrake db:create RAILS_ENV=productionをしたい。

RDSを使わない形でec2の本番環境にデプロイをしようと思っています。

rake db:create RAILS_ENV=productionをしたところ、以下のエラーが表示されました。

[shogo@ip-10-0-0-193 Portfolio]$ rake db:create RAILS_ENV=production
/home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/bundler/gems/bootstrap-rubygem-ef343b781ca1/lib/bootstrap/version.rb:4: warning: already initialized constant Bootstrap::VERSION
/home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:2: warning: previous definition of VERSION was here
/home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/bundler/gems/bootstrap-rubygem-ef343b781ca1/lib/bootstrap/version.rb:5: warning: already initialized constant Bootstrap::BOOTSTRAP_SHA
/home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:3: warning: previous definition of BOOTSTRAP_SHA was here
FATAL:  pg_hba.conf ????"127.0.0.1"????"postgres"???????"postgres, SSL??????????????
Couldn't create 'portfolio' database. Please check your configuration.
rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  pg_hba.conf ????"127.0.0.1"????"postgres"???????"postgres, SSL??????????????


Caused by:
PG::ConnectionBad: FATAL:  pg_hba.conf ????"127.0.0.1"????"postgres"???????"postgres, SSL??????????????

Tasks: TOP => db:create
(See full trace by running task with --trace)
[shogo@ip-10-0-0-193 Portfolio]$ 

考察

pg_hba.confファイルの設定方法が悪いと思うのですが、どの設定方法が正しいのかわかりません。

こちらの記事を参考に作業をしていました。
https://note.com/agw/n/nd98194bf135d

sudo nano /var/lib/pgsql/data/pg_hba.confは以下の通りです。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            ident
host    all             all              192.168.0.0/16           password
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident


アドバイスでも良いのでどなたかわかる方がいればアドバイスをお願いします。

追記
config/databse.yml

    default: &default
      adapter: postgresql
      encoding: unicode
      username: ユーザー名
      password: パスワード
      # ご自身のpostgresqlに登録してあるユーザ名にしてください。
      # username: <%= ENV.fetch('POSTGRES_USER', 'ユーザ名') %>
      # password: <%= ENV.fetch('POSTGRES_PASSWORD', 'パスワード') %>      # docker-composeのPOSTGRES_PASSWORDと揃える。
      pool: 5
      host: <%= ENV.fetch('DATABASE_HOST', 'localhost') %> # docker-composeのサービス名にする。
      port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %>

    development:
      <<: *default
      database: portfolio_development

    test:
      <<: *default
      database: portfolio_test

    production:
      <<: *default
      database: portfolio
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Yasumichi

    2020/05/03 22:51

    config/database.yml の production の設定を開示していただけますか?

    エラーから推測すると pg_hba.conf の次の行を修正すれば良い気もしますが。

    # host all all 127.0.0.1/32 ident

    キャンセル

  • NEMOTOSHOTA

    2020/05/03 22:55 編集

    Yasumichiさん
    コメントありがとうございます。

    config/databse.ymlになります。


    default: &default
    adapter: postgresql
    encoding: unicode
    username: ユーザー名
    password: パスワード
    # ご自身のpostgresqlに登録してあるユーザ名にしてください。
    # username: <%= ENV.fetch('POSTGRES_USER', 'ユーザ名') %>
    # password: <%= ENV.fetch('POSTGRES_PASSWORD', 'パスワード') %> # docker-composeのPOSTGRES_PASSWORDと揃える。
    pool: 5
    host: <%= ENV.fetch('DATABASE_HOST', 'localhost') %> # docker-composeのサービス名にする。
    port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %>

    development:
    <<: *default
    database: portfolio_development

    test:
    <<: *default
    database: portfolio_test

    production:
    <<: *default
    database: portfolio

    キャンセル

  • NEMOTOSHOTA

    2020/05/03 22:56

    下記の部分をどのような形に修正するのでしょうか?
    # host all all 127.0.0.1/32 ident

    キャンセル

回答 1

checkベストアンサー

0

config/databse.yml にて 'DATABASE_HOST', 'localhost' となっているようですので、

# host    all             all             127.0.0.1/32            ident

host    all             all             127.0.0.1/32            password

に変更してみてはいかがでしょう。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/05/04 00:43

    あとは、config/databse.yml のパスワードを変更してみてください。

    なお、最終的には、アプリ専用のユーザーを用意した方が良いと思います。

    また、pg_hba.conf で password としましたが、平文での送信になりますので md5 とか違う種別も検討した方が良いかもしれません。

    pg_hba.confファイルの設定方法 | PostgreSQLの使い方
    https://www.dbonline.jp/postgresql/ini/index2.html

    この辺は、そこまで詳しくないのでこれが良いとは言い切れませんが。

    キャンセル

  • 2020/05/04 00:53 編集

    config/databse.yml のパスワードを最新の者に変更し、rake db:create RAILS_ENV=productionをしたところ次のエラーが表示されました。

    エラーが変わり、バージョンのエラーに変わりましたので接続周りは解消された?と思います。

    夜遅くまでありがとうございました。
    感謝いたします。

    ------------------------------------------------------------
    [shogo@ip-10-0-0-193 Portfolio]$ vi config/database.yml
    [shogo@ip-10-0-0-193 Portfolio]$ rake db:create RAILS_ENV=production
    /home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/bundler/gems/bootstrap-rubygem-ef343b781ca1/lib/bootstrap/version.rb:4: warning: already initialized constant Bootstrap::VERSION
    /home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:2: warning: previous definition of VERSION was here
    /home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/bundler/gems/bootstrap-rubygem-ef343b781ca1/lib/bootstrap/version.rb:5: warning: already initialized constant Bootstrap::BOOTSTRAP_SHA
    /home/shogo/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/bootstrap-sass-3.4.1/lib/bootstrap-sass/version.rb:3: warning: previous definition of BOOTSTRAP_SHA was here
    Your version of PostgreSQL (90224) is too old. Active Record supports PostgreSQL >= 9.3.
    Couldn't create 'portfolio' database. Please check your configuration.
    rake aborted!
    Your version of PostgreSQL (90224) is too old. Active Record supports PostgreSQL >= 9.3.

    Tasks: TOP => db:create
    (See full trace by running task with --trace)
    [shogo@ip-10-0-0-193 Portfolio]$

    ------------------------------------------------------------

    キャンセル

  • 2020/05/05 19:49 編集

    こちら作業をしていたのですが、rake db:create RAILS_ENV=productionをしたところpgsqlのバージョンが古いと言われ、pgsqlのバージョンを上げました。

    そして再び同じ作業をしてrake db:create RAILS_ENV=productionをしたところ再びエラーが表示されてしまいました。
    今回はpsql -U postgresでも入ることができません。

    よろしければ再び知見を貸していただけますでしょうか?

    https://teratail.com/questions/259057?modal=q-comp

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る