1

当我尝试连接到具有 ip 地址的机器上的 postgres 数据库时,在 Rails 控制台上假设 xxx.xxx.xxx.xxx。

宝石安装

gem 'dbi'  
sudo apt-get install libpq-dev
gem 'dbd-pg'

我还授予了“postgres”用户的所有权限,并在这台 xxx.xxx.xxx.xxx 机器上重新启动了 postgres 服务器

GRANT ALL PRIVILEGES ON DATABASE test TO postgres WITH GRANT OPTION
sudo /etc/init.d/postgresql restart

我收到以下错误。

1.9.3p448 :001 > dbh = DBI.connect("DBI:Pg:test:xxx.xxx.xxx.xxx", "postgres", "")

DBI::OperationalError: could not connect to server: Connection refused 服务器是否在主机“xxx.xxx.xxx.xxx”上运行并接受端口 5432 上的 TCP/IP 连接?

from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/dbd-pg-0.3.9/lib/dbd/pg/database.rb:82:in `rescue in initialize'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/dbd-pg-0.3.9/lib/dbd/pg/database.rb:41:in `initialize'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/dbd-pg-0.3.9/lib/dbd/Pg.rb:157:in `new'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/dbd-pg-0.3.9/lib/dbd/Pg.rb:157:in `connect'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/dbi-0.4.5/lib/dbi/handles/driver.rb:33:in `connect'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/dbi-0.4.5/lib/dbi.rb:148:in `connect'
from (irb):1
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
from /home/ashwini/.rvm/gems/ruby-1.9.3-p448/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'

请告诉我哪里出错了。

谢谢...

4

1 回答 1

2

连接psql并运行:

SHOW port;

确定给定的端口不是5432。您可能也在使用 Mac;mac 用户通常会将一些二进制文件链接到libpq操作系统(旧的 PostgreSQL)提供的文件,还有一些链接到libpq他们自己安装的 PostgreSQL 文件。它们可以有不同的默认套接字目录和不同的 TCP 端口默认值。

您还应该:

SHOW listen_addresses ;

并确保它是*. 如果它改为说,localhost那么您的 PostgreSQL 没有侦听外部 IP,仅侦听本地环回。在这种情况下,您应该在配置文件中更改它。请参阅介绍性 PostgreSQL 文档。

如果您已确认 PostgreSQL 正在侦听感兴趣的 IP 和端口,则应确保您没有防火墙阻止来自外部机器的连接。不过,这通常会导致超时,而不是连接被拒绝错误。

于 2013-11-12T09:52:24.453 回答