无法在生产环境中连接到 Postgres

无法在生产环境中连接到 Postgres

我正在尝试通过本地 IP 连接到我的 Postgres 实例,使用命令可以毫无问题地连接到该实例psql -h localhost。但是,尝试通过 rails 运行时,我得到了以下信息:

$ rails c production
/home/avishai/.rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.9/lib/active_record/connection_adapters/postgresql_adapter.rb:1208:in `initialize': could not connect to server: Connection refused (PG::Error)
    Is the server running on host "10.61.99.194" and accepting
    TCP/IP connections on port 5432?

这是我的/etc/postgresql/9.1/main/pg_hba.conf

# DO NOT DISABLE!
# If you change this first entry you will need to make sure that the
# database superuser can access the database using some other method.
# Noninteractive access to all databases is required during automatic
# maintenance (custom daily cronjobs, replication, and similar tasks).
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# 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            trust
host    all             all             10.80.85.130/32         trust
host    all             all             10.80.85.130/32         md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

如何确保 Postgres 能够接受来自本地主机以及选定的内部 IP 的传入连接?

答案1

请尝试检查以下两点:

1)文件中/etc/postgresql/9.1/main/postgresql.conf必须有此行:

listen_addresses = '*'

代替

listen_addresses = '127.0.0.1'

你可以通过命令来检查netstat -tpln | grep 5432。你将在输出中看到类似以下内容的内容:

tcp  0  0  0.0.0.0:5432  0.0.0.0:* LISTEN 1150/postgres

如果第一个 IP 地址是0.0.0.0,则 postgres 正在监听所有接口,这正是您想要的。如果您在第一个 IP 地址字段中只看到127.0.0.1,则 postgresql 只监听localhost接口。

2) 尝试通过 检查防火墙规则iptables -L -n。在 INPUT 链中,必须有规则接受从运行 rails 的服务器的 IP 地址到端口 5432 的连接。您可以通过命令添加此规则:iptables -I INPUT -p tcp -s 10.80.85.130 --dport 5432 -j ACCEPT

但我认为,问题出在第1)点。

答案2

我也遇到过同样的困扰。

就我而言,由于某种原因,它使用了 IPV6 Localhost。

在你的 pg_hba.conf 中尝试这个:

host    all             all             ::1/128                 md5

相关内容