【问题标题】:Ruby ODBC with remote database带有远程数据库的 Ruby ODBC
【发布时间】:2015-06-22 16:07:20
【问题描述】:

我正在开发一个通过 ODBC、SQLR 连接到旧数据库 Eloquence 的应用程序。我使用 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,但有同样的问题。

【问题讨论】:

  • 顺便说一句,考虑使用Sequel 给你一个ORM 层。它可以很好地与 ODBC 配合使用,并且无需使用特定于 DBM 的查询,从而使您的代码更具可移植性。
  • 铁皮人:在我看来,这与我的问题完全无关。我的用例涉及对遗留数据库的几个只读查询,并且不需要添加 ORM 层的开销。
  • 这是一个试图提供帮助的建议。要么接受,要么离开它。你的反应出奇的防御性。
  • 铁皮人:我并不想在我的回应中进行防御。我的挣扎是,在不知道我的用例的情况下,你建议我使用 Sequel。如果我是编程新手,我可能会毫无疑问地接受这一点,并为我的应用程序增加不必要的开销。如果你愿意,我可以在聊天或其他方式上多谈。任何防御都来自我的斗争,即开发社区忘记了数据库非常强大和可用,即使没有 ORM。
  • 虽然也没有回答,但我很幸运(在与其他 gem 进行了多次试验和错误之后)使用 rdbirdbi-driver-odbc 与 sql 建立 odbc 连接以及甚至访问(mdb ) 数据库。这没有 ORM,您可以相当轻松地编写手动查询。在一些应用程序中,我实际上已经成功地编写了自己的轻量级 ORM,以促进基本功能,而不会出现社区版本的臃肿。

标签: ruby odbc unixodbc


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 1970-01-01
    相关资源
    最近更新 更多