【问题标题】:Unable to connect to postgresQL with Ruby无法使用 Ruby 连接到 postgresQL
【发布时间】:2016-07-13 18:54:37
【问题描述】:

我在档案中搜索过,但找不到解决我的难题的答案。我正在用 Ruby 编写代码,并在我的本地 Mac Yosemite 上使用 watir webdriver 框架,并希望连接到 linux 机器上的 postgres 数据库。

我在本地 Mac 上安装了所需的 ruby​​ gems

* 本地宝石 *

  • dbd-pg (0.3.9)
  • pg (0.18.4)
  • dbi (0.4.5, 0.4.4)

我正在使用以下代码。

require 'rubygems'
require 'pg'
require 'dbd/pg'
require 'dbi'
conn = PGconn.connect("10.0.xx.xx","5432",'','',"mydbname","dbuser", "") 
res  = conn.exec('select *  from priorities_map;') 
puts res.getvalue(0,0)    
conn.close if conn  

在运行这个 我收到这些错误

.initialize': Could not connect to server: Connection refused (PG::ConnectionBad)

Is the server running on host "10.0.xx.xx" and accepting
TCP/IP connections on port 5432?

如果我使用代码

 dbh = DBI.connect("dbi:pg:mydbname:ipaddress", "user", "")
 row = dbh.exec('select * from etr_priorities_map;') 
 puts row.getvalue(0,0)
 dbh.disconnect if dbh

我得到了错误

block in load_driver': Unable to load driver 'pg' (underlying error: wrong constant name pg) (DBI::InterfaceError)  from System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize'

我是 Ruby 的新手。我该如何解决这些问题?

【问题讨论】:

  • 你能远程登录到那个 IP 地址的 5432 端口吗? postgresql 是否在侦听该 IP?第一条错误消息是服务器拒绝连接,与您的代码无关等。如果它没有监听,将会改变。

标签: ruby postgresql watir-webdriver pg dbd-pg


【解决方案1】:

正如@Doon 在 cmets 中所说,第一个错误来自 TCP 连接,通常意味着您的数据库没有在网络上侦听。大多数 PostgreSQL 软件包都带有只允许本地连接的默认配置,但您可以通过 listen_addresses 设置在服务器配置中启用网络连接。我在 Mac 上通过 Homebrew 安装了 PostgreSQL,我的配置位于 /usr/local/var/postgres/postgresql.conf,但如果你以其他方式安装它,路径可能会有所不同。

发生第二个错误是因为连接字符串is case-sensitive 的“驱动程序”部分,而Postgres 的DBD 驱动程序名为Pg,而不是pg。试试这个:

dbh = DBI.connect("dbi:Pg:mydbname:ipaddress", "user", "")

此外,除非您决心使用 Ruby/DBI,否则您可能需要考虑使用最近维护的库。 Ruby-DBI 的编写和测试都非常出色,但它自 2010 年以来就没有发布过,而 Ruby 本身在此期间发生了相当大的变化。

如果您确实想考虑替代方案,我将Sequel 用于大多数情况,我强烈推荐它,特别是对于 Postgres 开发,但DataMapperActiveRecord 也有很大的用户群。

【讨论】:

  • 我知道我不应该在这个很棒的论坛上说谢谢,但我仍然会这样做。谢谢@Doon 和@Michael。都跑起来了将 listen_addresses 设置更改为 * 。
  • 不知道续集。我从它开始。
  • 如果有效,您可以接受这个答案。这鼓励回答问题的人更频繁地回答。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2012-11-01
  • 2019-11-02
  • 2011-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
相关资源
最近更新 更多