严重:用户 "rails" 的对等身份验证失败

FATAL: Peer authentication failed for user "rails"

我正在尝试 运行 在 DigitalOcean 服务器上使用 postgresql db:create

但是,它返回错误 Peer authentication failed for user "rails",指的是 config/database.yml 存储登录凭据的位置

奇怪的是,当我通过 SSH 登录服务器时,这些凭据以纯文本形式显示给我。我已经尝试了 <%= ENV['APP_DATABASE_PASSWORD'] %> 和以纯文本形式显示给我的密码,同样的事情发生了。

环境正在生产中,我必须手动强制执行,因为该应用程序在启动时正在开发中并且强制它在 config/environments.rb 中更改是行不通的。

如果我不得不猜测,我可能会说环境中发生了一些有趣的事情,因为 DigitalOcean 将继续提供站点的缓存版本,直到服务器重新启动并且它可能仍然认为它正在开发中它很关心。但在我弄清楚如何在启动时将其强制投入生产之前,我有点像第 22 条军规。

这个问题是我在使用 postgres 并尝试在后端设置数据库之后遇到的问题,所以我需要完成一些事情。

非常感谢。

问题出在您的 pg_hba.conf 文件上。您可以在 /etc/postgresql/9.3/main/pg_hba.conf 中找到它。这里 9.3 是 postgres 版本,你可以用你的 postgres 版本来改变。有关身份验证的更多详细信息,请参见 here

您的代码类似于:

# TYPE  DATABASE        USER    ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local    all             all                        peer

您可以将其更改为 md5trust

# TYPE  DATABASE        USER    ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local    all             all                        trust

它将解决您的问题。

注意: 要编辑 pg_hba.conf 文件,您应该在服务器上具有 sudo 权限。