注意:这是转发。由于未公开的原因,此问题之前已被删除
好的,我一直在努力让它像一整天一样工作,而我离开始的时候几乎没有任何进展。
我正在尝试让 Ruby On Rails 连接到 SQL Server。我已经安装并配置了 unixODBC 和 FreeTDS,并安装了几乎所有与存在的 ODBC 相关的 Ruby gem。
(这已更新以显示带有 -v 的 isql 的输出)
[earlz@earlzarch myproject]$ tsql -S AVP1 -U sa -P pass
locale is "en_US.UTF-8"
locale charset is "UTF-8"
1> quit
[earlz@earlzarch ~]$ isql -v AVP1 sa pass
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
[earlz@earlzarch myproject]$ rake db:version
(in /home/earlz/myproject)
rake aborted!
IM002 (0) [unixODBC][Driver Manager]Data source name not found, and no default driver specified
(See full trace by running task with --trace)
因此,如您所见,tsql 有效,但 isql 无效。打破它的两者有什么区别?
/etc/odbc.ini
[AVP1]
Description = ODBC connection via FreeTDS
Driver = TDS
Servername = my.server
UID = sa
PWD = pass
port = 1232
Database = mydatabase
/etc/odbcinst.ini
[TDS]
Description = v0.6 with protocol v7.0
Driver = /usr/lib/libtdsodbc.so
Setup = /usr/lib/libtdsS.so
CPTimeout =
CPReuse =
FileUsage = 1
(是的,我已确保.so
文件存在)
freetds.conf 中的相关部分
[AVP1]
host = my.server
port = 1232
tds version = 8.0
最后,我的 database.yml
development:
adapter: sqlserver
mode: odbc
dsn: AVP1
username: sa
password: pass
在我拔掉所有头发之前,有人可以帮我吗?
我使用的是完全最新的 64 位 Arch Linux。
什么可能导致 isql 失败。对于这个问题,我已经尝试了迄今为止我看到的所有解决方案,但它们都没有真正为我工作。我是否必须重新编译 FreeTDS 或其他什么?
好的,我还使用 strace 验证了它正在查找配置文件,如以下摘录所示:
open("/etc/odbc.ini", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=159, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc71fe09000
read(3, "[AVP1]\n Description = ODBC "..., 4096) = 159