PostgreSQLデータベースにアクセスできないときの対処法
第四十五回
FATAL C28000 MIdent authentication failed for user "rails" Fauth.c L337 Rauth_failed
というエラーが出て,MigrationやconsoleからのDBアクセスが失敗したのでいろいろ調べてみると,こんな記述を発見しました.
it is due to Rails connecting to PostgreSQL via TCP socket, not UNIX socket, so in the pg_hba.conf you need to setup a “host” line, not a “local” line.
どうやらRailsがPostgreSQLにアクセスする際にUNIX socketではなくTCP socketを利用していて,TCPを利用したアクセスではpasswordによるユーザ認証*1がPostgreSQLの設定で許可されていないことが原因のようです.
同ページの対処法を試してみたところうまく動くようになったのでメモを残しておきます.
pg_hba.confを修正
データディレクトリにあるpg_hba.confファイルを以下のpg_hba.confの項に示すように修正します.データディレクトリとは,PostgreSQLをインストールした際に作成したdataディレクトリのことであり,私の場合は
/var/lib/pgsql/data
ですが,多くの場合
~postgres/data
というようにPostgreSQLユーザのホームディレクトリになっているようです.
pg_hba.conf
host all all 127.0.0.1/32 ident sameuser
となっている行を
host all all 127.0.0.1/32 password
のように修正して,PostgreSQLを再起動するとRailsからアクセスすることができるようになりました.
*1:PostgreSQLに対する