Ruby ODBC与远程数据库

时间:2015-06-22 16:07:21

标签: ruby odbc unixodbc

我正在开发一个连接到遗留数据库,Eloquence,通过ODBC,SQLR的应用程序。我使用UnixODBC设置我的服务器并设置驱动程序和数据源,如下所示:

/etc/odbcinst.ini:

[SQLR]
Description=SQLR for Elqouence
Driver=/opt/sqlr/lib/libsqlrodbc.so
Driver64=/opt/sqlr/lib64/libsqlrodbc64.so
FileUsage = 1

/etc/odbc.ini:

[reservations]
Description = SQLR datasource for RES database
Driver = SQLR
Database = res
Servername = eloq-dev
Port = 8003
UserName = sqlrodbc

我确认我可以通过运行isql reservations连接到数据源,并运行了几个查询以确保。没有问题。然后我使用ODBC gem和以下代码将我的Ruby代码连接到数据库:

require 'rdbi-driver-odbc'
RDBI.connect :ODBC, db: "reservations"

其中输出以下错误:

Unable to connect to host.
Host 127.0.0.1, Service sqlrodbc
errno 111: Connection refused
ODBC::Error: 08001 (3047) [unixODBC][Marxmeier][SQL/R ODBC Client]connection failure

我担心它使用127.0.0.1作为主机,即使eloq-dev主机名在/ etc / hosts中设置为不同的地址。我还担心isql有效,但ODBC gem没有。

修改

作为补充说明,当我使用tcpdump命令时,与我的连接相关的唯一输出是:

$ tcpdump -i lo
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
18:38:39.688264 IP localhost.50447 > localhost.mcreport: Flags [S], seq 3355035364, win 43690, options [mss 65495,sackOK,TS val 1655798115 ecr 0,nop,wscale 7], length 0
18:38:39.688280 IP localhost.mcreport > localhost.50447: Flags [R.], seq 0, ack 3355035365, win 0, length 0

根本没有数据包通过网络传输。

我还改变了我的代码以使用RDBI而不是Ruby-ODBC,但也有同样的问题。

1 个答案:

答案 0 :(得分:2)

我的问题最终是2倍。我通过VPN连接到Eloquence和SQL / R,这不如我想象的那么稳定,因此连接正在下降。另一个问题是SQL / R在odbc.ini文件中使用Server而不是ServerName和Service而不是Port。一旦我稳定了VPN并修复了odbc.ini文件,我就可以毫无问题地连接。