13

我在将 Ruby 连接到 Microsoft SQL Server 时遇到问题。我正在运行 Mac OS X,但目标环境是 Ubuntu Linux。

这是我尝试过的:

  • 安装unixODBC
  • 安装FreeTDS
    • 使用了选项--with-unixodbc=/usr/local/etc --with-tdsver=8.0

然后我有这些文件/usr/local/etc

  • odbc.ini
  • odbcinst.ini
  • freetds.conf

odbcinst.ini我在我的 ODBC 驱动程序文件中添加了对文件中 FreeTDS 驱动程序的引用,如下所示:

;
; odbcinst.ini
;
;
[FreeTDS]
Driver = /usr/local/lib/libtdsodbc.so

然后我freetds.conf像这样在文件中配置服务器:

# Aries database server (SQL Server 2008)
[aries-db1]
        host = xx.xx.xx.xx
        port = 1433
        tds version = 8.0

最后我在odbc.ini文件中添加了 ODBC DSN,如下所示:

[aries-db1]
Driver      =   FreeTDS
Description =   ODBC Connection via FreeTDS
Trace       =   1
Servername  =   aries-db1
Database    =   MY_DB
UID         =   user1
PWD         =   pass1

我可以验证我的服务器是否在线并且端口是否打开(通过 telnet 和 yougetsignal.com 端口检查)。

作为测试,我这样做了:

tsql -S aries-db1 -U user1 -P pass1

它似乎连接得很好。传入无效值会导致预期错误。

所以最后我的问题:

如何将其扩展到 Ruby?到目前为止,我尝试过的任何方法都没有奏效。我试过这样的续集:

require 'sequel'
Sequel.connect('aries-db1')['select * from foo'].all

我收到这样的错误:

Sequel::DatabaseConnectionError: ODBC::Error: S1000 (0) [unixODBC][FreeTDS][SQL Server]Unable to connect to data source

这告诉我它正在正确找到我的驱动程序配置,但由于某种原因无法连接。

我也尝试过这样的 DBI:

DBI.connect('DBI:ODBC:aries-db1')

我得到一个类似的错误。

有什么建议么?我觉得我已经很接近了,但不确定接下来要尝试什么来解决这个问题。

4

1 回答 1

14

查看 https://github.com/rails-sqlserver/tiny_tds TinyTds - 使用 DB-Library 的现代、简单和快速的 Ruby FreeTDS 库

它易于安装和使用

于 2011-01-13T08:11:52.887 回答