Ruby连接到SQL Server

Ben*_*man 13 ruby sql-server odbc unixodbc freetds

我在将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文件中将FreeTDS驱动程序的引用添加到我的ODBC驱动程序文件中,如下所示:

;
; odbcinst.ini
;
;
[FreeTDS]
Driver = /usr/local/lib/libtdsodbc.so
Run Code Online (Sandbox Code Playgroud)

然后我在freetds.conf文件中配置服务器,如下所示:

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

最后我在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
Run Code Online (Sandbox Code Playgroud)

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

作为测试,我这样做了:

tsql -S aries-db1 -U user1 -P pass1
Run Code Online (Sandbox Code Playgroud)

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

最后我的问题:

我如何将其扩展到Ruby?到目前为止我没有尝试过任何工作.我像这样尝试了Sequel:

require 'sequel'
Sequel.connect('aries-db1')['select * from foo'].all
Run Code Online (Sandbox Code Playgroud)

我收到这样的错误:

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

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

我也试过像这样的DBI:

DBI.connect('DBI:ODBC:aries-db1')
Run Code Online (Sandbox Code Playgroud)

而且我得到了类似的错误.

有什么建议?我觉得我非常接近,但我不确定接下来要尝试解决这个问题.

小智 14

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

它易于安装且易于使用