用Cloud9 + PostgreSQL + Rails db:migrate来解决”FATAL: Ident authentication failed for user”错误的方法是什么?

进行 PostgreSQL 的安装和初始化。

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

sudo /etc/init.d/postgresql96 initdb

切换到postgres用户并创建一个数据库用户。

sudo -u postgres -i
psql
createuser -d -U postgres -P [USERNAME]
logout

【重要】请修改pg_hba.conf文件,并设置可连接的客户端

请参考 pg_hba.conf 的详细设置来连接其他主机。

sudo vi /var/lib/pgsql96/data/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 all 改为了 trust,但是由于Rails->PostgreSQL 是通过TCP进行访问的,所以似乎需要将 host all all 127.0.0.1/32 进行更改。

当无法访问PostgreSQL数据库时的解决方法 – のほほん徒然

Rails在访问PostgreSQL时使用的是TCP socket而不是UNIX socket,并且通过使用TCP进行访问时,由于PostgreSQL的配置不允许使用密码进行用户认证,这似乎是问题的原因。

启动postgresql并进行数据库设置

sudo /etc/init.d/postgresql96 start
rails db:setup

请在中国母语环境下,将以下内容进行释义:

– 参考

    • AWS Cloud9でPostgreSQLを使ったrailsプロジェクトを立ち上げる – niki12260714の日記

 

    AWS Cloud9でPostgreSQLに対しrake db:migrateが失敗する – niki12260714の日記

请注意一些事项。

Cloud9のPostgresをアップデート。 – Qiita で説明されている pg_hba.conf のパスは、

sudo vi /etc/postgresql/9.6/main/pg_hba.conf

使用apt-get 进行软件包管理。从发布时点(2017/09/16)到现在只过去了大约一年时间。
需要注意未来的更新可能会带来变动。

关于服务的命令集合

DB初期化
sudo /etc/init.d/postgresql96 initdb
スタート
sudo /etc/init.d/postgresql96 start
再起動
sudo /etc/init.d/postgresql96 restart
广告
将在 10 秒后关闭
bannerAds