Назад | Перейти на главную страницу

Не удается подключиться к Postgres в рабочей среде

Я пытаюсь подключиться к своему экземпляру Postgres по локальному IP-адресу, к которому я могу подключиться без проблем, используя psql -h localhost команда. Однако, пытаясь запустить через рельсы, я получаю следующее:

$ 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 может принимать входящие соединения от localhost, а также на выбранных внутренних IP-адресах?

Пожалуйста, попробуйте проверить эти два момента:

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 должно быть правило, разрешающее подключение к порту 5432 с IP-адреса сервера, на котором установлены рельсы. Вы можете добавить это правило с помощью команды: iptables -I INPUT -p tcp -s 10.80.85.130 --dport 5432 -j ACCEPT

Но думаю, проблема будет в пункте 1).

У меня была такая же проблема.

В моем случае по какой-то причине он использовал IPV6 Localhost.

Попробуйте это в своем pg_hba.conf:

host    all             all             ::1/128                 md5