我在档案中搜索过,但找不到解决我的难题的答案。我用Ruby编写代码,并在本地Mac Yosemite上使用watir网络驱动程序框架,我想连接到linux盒子上的postgres数据库。
我在本地Mac 上安装了所需的红宝石宝石
*本地宝石*
- 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'
我是鲁比的新手。如何解决这些问题?
正如@Doon在评论中所说,第一个错误来自TCP连接,通常意味着您的数据库没有在网络上侦听。大多数PostgreSQL包都有一个默认配置,只允许本地连接,但您可以通过listen_addresss设置在服务器配置中启用网络连接。我在Mac上通过Homebrew安装了PostgreSQL,我的配置是/usr/local/var/postgres/postgresql.conf
,但如果你用其他方式安装,路径可能会不同。
发生第二个错误是因为连接字符串的"driver"部分区分大小写,Postgres的DBD驱动程序名为Pg
,而不是pg
。试试这个:
dbh = DBI.connect("dbi:Pg:mydbname:ipaddress", "user", "")
此外,除非您一心想使用Ruby/DBI
,否则您可能需要考虑使用最近维护的库。Ruby DBI编写和测试都很好,但自2010年以来就没有发布过,Ruby本身也在这期间发生了相当大的变化。
如果你真的想考虑替代方案,我几乎所有的事情都使用Sequel,我强烈推荐它,尤其是对于Postgres开发,但DataMapper和ActiveRecord都有很大的用户基础。