ruby-on-rails - Ruby on Rails PG::ConnectionBad: fe_sendauth: 没有提供密码

  显示原文与译文双语对照的内容

试图在本地postgres数据库上运行"rake测试"时,会引发上述异常。

下面是我的pg_hba.conf file: # 数据库管理登录,由Unix域套接字本地所有


# TYPE DATABASE USER ADDRESS METHOD



#"local" is for Unix domain socket connections only


local all username peer


local myapp_dev myapp md5


local myapp_test myapp md5


local myapp_prod myapp md5


#local all all peer


# IPv4 local connections:


host all all 127.0.0.1/32 md5


# IPv6 local connections:


host all all ::1/128 md5


# Allow replication connections from localhost, by a user with the


# replication privilege.


#local replication postgres peer


#host replication postgres 127.0.0.1/32 md5


#host replication postgres ::1/128 md5



下面是我 database.yml的相关部分


test:



adapter: postgresql


database: myapp_test


pool: 5


timeout: 5000


host: localhost


username: username


password:



实际 database.yml 中,'用户名'被替换为我的实际用户名,我以。 由于身份验证方法定义为'对等点',因此不需要密码。

我还注意了重新启动 Postgres


sudo -u postgres pg_ctlcluster 9.3 main restart



我这里还有什么?

时间:

localhost 作为主机引用TCP连接,这意味着auth方法是每个 pg_hba.confmd5 ( 需要密码):

# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5

如果要采用 peer 方法,则需要通过Unix域套接字连接,因为似乎使用的是,这意味着在 host 字段中使用 /var/run/postgresql,或者在所有( 除非 环境变量 说否则它是默认的) 中都没有任何东西。

编辑:如果使用数据库 uri ( 从 rails-4.1 开始,如 http://weblog.rubyonrails.org/2014/4/8/Rails-4-1/ 所声明的。),则语法可能是:

  • 对于 localhost:
    test:"postgresql://localhost/myapp_test"

  • 对于默认的Unix套接字域( 主机字段为空):
    test:"postgresql:///myapp_test"

更改下面的代码,它将工作


pg_hba.conf:


# IPv4 local connections:


host all all 127.0.0.1/32 trust


# IPv6 local connections:


host all all ::1/128 trust



在它的解释下面:

信任

允许连接无条件。这里方法允许任何可以连接到PostgreSQL数据库服务器的任何PostgreSQL用户。

MD5

要求客户端为身份验证提供double-MD5-hashed密码。

请在这里引用更多的

...