1

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

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

*当地宝石*

  • dbd-pg (0.3.9)
  • 皮克(0.18.4)
  • 分贝 (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'

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

4

1 回答 1

0

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

发生第二个错误是因为连接字符串的“驱动程序”部分区分大小写,并且 Postgres 的 DBD 驱动程序被命名为Pg,而不是pg。尝试这个:

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

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

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

于 2016-03-28T22:28:03.887 回答