Ruby 带有远程数据库的 ODBC
Ruby ODBC with remote database
我正在开发一个连接到遗留数据库的应用程序,Eloquence, through ODBC and SQL/R。我用 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,但我遇到了同样的问题。
我的问题最终是双重的。我通过 VPN 连接连接到 Eloquence 和 SQL/R,但它并没有我想象的那么稳定,因此连接中断了。
另一个问题是 SQL/R 使用 Server 而不是 ServerName 和 Service 而不是 odbc.ini 文件中的 Port。
一旦我稳定了我的 VPN 并修复了 odbc.ini 文件,我就可以毫无问题地连接了。
我正在开发一个连接到遗留数据库的应用程序,Eloquence, through ODBC and SQL/R。我用 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,但我遇到了同样的问题。
我的问题最终是双重的。我通过 VPN 连接连接到 Eloquence 和 SQL/R,但它并没有我想象的那么稳定,因此连接中断了。
另一个问题是 SQL/R 使用 Server 而不是 ServerName 和 Service 而不是 odbc.ini 文件中的 Port。
一旦我稳定了我的 VPN 并修复了 odbc.ini 文件,我就可以毫无问题地连接了。