【问题标题】:DBI::OperationalError: could not connect to server: Connection refusedDBI::OperationalError:无法连接到服务器:连接被拒绝
【发布时间】:2013-11-12 09:41:18
【问题描述】:

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

Gem 已安装

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: 无法连接到服务器:连接被拒绝 服务器是否在主机“xxx.xxx.xxx.xxx”上运行并接受 TCP/IP 端口 5432 上的连接?

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>'

请告诉我哪里出错了。

谢谢...

【问题讨论】:

  • 嗯,你检查过错误信息的提示吗?特别是on port 5432 部分? (顺便说一句,8.3 已经过时了。您需要计划升级。)
  • 我的 postgres 没有更新..sry 忘了从命令中删除旧版本

标签: ruby ruby-on-rails-3 postgresql dbi


【解决方案1】:

psql 连接并运行:

SHOW port;

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

您还应该:

SHOW listen_addresses ;

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

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

【讨论】:

  • 我使用的是 Ubuntu 12.04
  • @Ashwini 好的。你有没有机会安装多个 PostgreSQL?您要连接的 PostgreSQL 在哪个端口上运行?它是否在侦听目标 IP 地址?运行SHOW listen_addresses ;
  • 实际上 Postgres 安装在另一台 Ubuntu 12.04 机器上(我也在使用 Ubuntu 12.04 ),我正在尝试连接到该数据库。我没有指定任何端口号。它可能是 postgres 使用的默认端口
  • @Ashwini 所以......也许你应该检查一下服务器正在运行的端口,就像错误消息所说的那样?
  • ok 我已经运行了命令端口 -> 5432 和listen_addresses -> localhost
猜你喜欢
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2020-07-27
  • 2020-12-09
  • 1970-01-01
  • 2013-11-18
  • 2019-02-20
  • 2013-05-19
相关资源
最近更新 更多