Posted at

Cloud9 + PostgreSQL + Rails db:migrate で 「FATAL: Ident authentication failed for user」エラーを解決する方法


postgresql のインストールと初期化


ec2-user$

sudo yum -y install postgresql96

sudo yum -y install postgresql96-devel
sudo yum -y install postgresql96-server

sudo /etc/init.d/postgresql96 initdb



postgresユーザに切り替え、DBユーザーを作成


ec2-user$

sudo -u postgres -i



-bash-4.2$

psql

createuser -d -U postgres -P [USERNAME]
logout


【重要】pg_hba.conf を変更し、接続できるクライアントを設定する

pg_hba.conf については、他ホストから接続するための設定 が詳しいのでそちらを参照してください。


ec2-user:~/environment/project

sudo vi /var/lib/pgsql96/data/pg_hba.conf



pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
- host all all 127.0.0.1/32 ident
+ host all all 127.0.0.1/32 trust
# 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


最初、local all alltrust に変更しましたが、Rails->PostgreSQL はTCPを利用したアクセスになるため host all all 127.0.0.1/32 を変更する必要があるようです。

PostgreSQLデータベースにアクセスできないときの対処法 - のほほん徒然


RailsがPostgreSQLにアクセスする際にUNIX socketではなくTCP socketを利用していて,TCPを利用したアクセスではpasswordによるユーザ認証がPostgreSQLの設定で許可されていないことが原因のようです.



postgresqlの起動とDBセットアップまで

sudo /etc/init.d/postgresql96 start

rails db:setup


参考


留意点

パッケージ管理も apt-get をつかっていました。公開時点(2017/09/16)から1年ほどしか経過していません。

今後のアップデートによって変更される可能性に注意しておく必要があります。


サービス周りのコマンド集

DB初期化

sudo /etc/init.d/postgresql96 initdb
スタート
sudo /etc/init.d/postgresql96 start
再起動
sudo /etc/init.d/postgresql96 restart