【发布时间】:2011-01-13 04:59:08
【问题描述】:
我在将 Ruby 连接到 Microsoft SQL Server 时遇到问题。我正在运行 Mac OS X,但目标环境是 Ubuntu Linux。
这是我尝试过的:
然后我把这些文件放在/usr/local/etc:
odbc.iniodbcinst.inifreetds.conf
我在我的 ODBC 驱动程序文件中添加了对 odbcinst.ini 文件中 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')
我遇到了类似的错误。
有什么建议吗?我觉得我已经很接近了,但不确定接下来要尝试什么来解决此问题。
【问题讨论】:
-
I can verify that my server is online and the port is open (via telnet & yougetsignal.com port check).抱歉,我无法回答您的问题。但是您应该知道,将 SQL Server 暴露在 Internet 上可能会导致安全问题。各种机器人扫描 SQL Server 并尝试连接/攻击它。 -
您必须使用 MRI 吗?不能用 JRuby 和 JDBC 吗?
-
@will - 感谢您指出这一点。我非常清楚这有多糟糕,但在生产系统中,我将通过 IP 地址将其锁定并更改端口。我只是想验证所有这些部分是否可以协同工作。
-
我对 JDBC 或 JVM 的经验为零,但我会说这是可能,只是我不太可能会选择它。
标签: sql-server ruby odbc freetds unixodbc