rails不会通过tcp / ip连接到Postgres,但是是Unix套接字

时间:2019-02-21 13:40:15

标签: ruby-on-rails postgresql

old thread

我尝试建立一个postgres数据库,并在执行“ rake db:schema:load”时遇到以下错误。因此,似乎Rails尝试使用unix套接字而不是我已配置的tcp / ip连接到我的数据库(请参阅下面的database.yml)。我不明白为什么会这样。我偶然发现了以下线程,该线程确认我已正确设置了database.yml。 click here。一种想法是更改postgres配置中的方法:类型对等体:md5本地。但是,据我了解的postgres配置,我的第二行应该做的工作。此外,另一个Rails应用程序正在使用tcp / ip在同一服务器上运行,因此我希望psql配置正确。我还比较了database.yml文件,它们是相同的

[root@myserver app]# rake db:schema:load                                    
-- enable_extension("plpgsql")
   -> 0.0166s
-- create_table("qip_changes", {:force=>:cascade})
   -> 0.0494s
-- create_table("users", {:force=>:cascade})
   -> 0.0539s
-- add_foreign_key("qip_changes", "users")
   -> 0.0037s
-- enable_extension("plpgsql")
rake aborted!
PG::ConnectionBad: FATAL:  Peer authentication failed for user "my_user_name"

pg_hba.conf:

     # TYPE  DATABASE        USER            ADDRESS                 METHOD
     local   all             all                                     peer
     host    all         all         127.0.0.1/32          md5

database.yml:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: my_db_name
  username: my_user_name
  password: my_password
  host: localhost
  port: 5432

test:
  <<: *default
  database: my_db_name
  username: my_user_name
  password: my_password
  host: localhost
  port: 5432

production:
  <<: *default
  database: my_db_name
  username: my_user_name
  password: my_password
  host: localhost
  port: 5432

1 个答案:

答案 0 :(得分:0)

如果您输入数据库信息作为URL,它将通过tcp / ip正确连接。如果我们不必以这种方式输入数据库信息,我会很高兴,因为它看起来很糟,而且难以维护。

default: &default
  adapter: postgresql
  encoding: unicode

development:
  <<: *default
  # Rails 6 requires us to put this in as a url in order to force tcp/ip
  url: postgresql://postgres::example@localhost:5432/dev?pool=5