首页 > 解决方案 > rails 不通过 tcp/ip 连接到 postgres 但 unix socket

问题描述

旧线程

我尝试设置 postgres 数据库并在执行“rake db:schema:load”时遇到以下错误。因此,rails 似乎尝试使用 unix 套接字连接到我的数据库,而不是我已配置的 tcp/ip(请参阅下面的 database.yml)。我不明白为什么会这样。我偶然发现了以下线程,它确认我已经正确设置了我的 database.yml。点击这里。一个想法是在 postgres 配置中更改方法:peer for type: local to 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

数据库.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

标签: ruby-on-railspostgresql

解决方案


如果您将数据库信息作为 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

推荐阅读