无法使用Ruby连接到postgresQL



我在档案中搜索过,但找不到解决我的难题的答案。我用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都有很大的用户基础。

相关内容

  • 没有找到相关文章

最新更新