SQL Server和Rails的问题

问题描述:

注意:这是一个转发。此问题之前因为未公开的原因而被删除SQL Server和Rails的问题

好的,我一直在努力让这个工作像现在一整天,而我几乎没有任何进一步离开时。

我想让Ruby On Rails连接到SQL Server。我已经安装了unixODBC,并配置了它和FreeTDS,并安装了几乎所有与存在的ODBC相关的Ruby gem。

这已更新显示ISQL与-v输出)

​​

所以,你可以看到,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 

好吧,我终于想通了之后只有2敲我的头靠在直天墙壁。

我会尽量提供尽可能多的信息,以便如果有人发现这种情况与我处于同一情况时,他们会发现这很有用。

[[email protected] ~]$ cat /etc/odbc.ini 
[AVP1] 
Description=ODBC connection via FreeTDS 
Driver=/usr/lib/libtdsodbc.so 
Server=192.168.0.100 
UID=sa 
PWD=pass 
Port=1232 
ReadOnly=No 
[[email protected] ~]$ cat /etc/odbcinst.ini 
[TDS] 
    Description  = v0.60 with protocol v7.0 
    Driver   = /usr/lib/libtdsodbc.so 
    Driver64 = /usr/lib 
    Setup   = /usr/lib/libtdsS.so 
    Setup64 = /usr/lib 
    CPTimeout  = 
    CPReuse   = 
    FileUsage  = 1 
[[email protected] ~]$ cat /etc/freetds/freetds.conf 
[global] 
     tds version = 8.0 
     initial block size = 512 
     swap broken dates = no 
     swap broken money = no 
     try server login = yes 
     try domain login = no 
     cross domain login = no 
     # If you get out-of-memory errors, it may mean that your client 
     # is trying to allocate a huge buffer for a TEXT field. 
     # Try setting 'text size' to a more reasonable limit 
     text size = 64512 

[TDS] 
     host = 192.168.0.100 
     port = 1232 
     tds version = 8.0 

,如果你的幸运,在那之后:

[[email protected] ~]$ isql -v AVP1 
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source 
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed 
[ISQL]ERROR: Could not SQLConnect 
[[email protected] ~]$ isql -v AVP1 sa pass 
+---------------------------------------+ 
| Connected!       | 
|          | 
| sql-statement       | 
| help [tablename]      | 
| quit         | 
|          | 
+---------------------------------------+ 
SQL> 

我没有设置任何环境变量,我也不必手动编译任何东西或者与Arch Linux的64位(日期2010年4月7日)。获得isql后,Rails立即连接到数据库。现在我只需要弄清楚为什么db:schema:load不工作,但那是另外一个问题:)

另外,注意这个文件集,最后在/etc/odbc.ini我设置了Driver领域成为之间的唯一真正的区别驱动程序的实际文件名,而不是为某些配置条目命名的。

当建立freetds的,SQL服务器的当前版本需要TDS协议V8(http://www.freetds.org/userguide/config.htm):

./configure --with-tdsver=8.0 --enable-msdblib 

如果有人得到了TSQL的工作,但一直在寻求无远弗届的互联网上,并troubleshooted他们CONFIGS和仍然无法让isql正常工作检查你的服务器日志。

我一直在解决一个Xubuntu 12.04 unixodbc安装和配置一个星期,并试图尽一切可能让它得到修复,当我决定检查我的Windows服务器事件查看器以查看当请求进入服务器时发生了什么或者如果请求甚至进入服务器,并发现问题是我无法进入特定数据库。我能够进入SQL Server好,但不是我在odbc.ini文件中列出的实际数据库。

这里是事件的具体文本日志“用户登录失败‘ePMX’

原因:无法打开明确指定的数据库[CLIENT: 192.168.27.25]。”

引起我兴趣的是“显式”一词。所以我简单地评论了Database = <DB Name>,并突然发现一切正常,经过数不清的数小时的研究和尝试,我得到了SQL提示。

因此,如果您在使用unixodbc时遇到问题,请不要忘记排除服务器端和客户端之间的故障,因为我看过很多帖子,其中有人遇到了完全相同的问题,但是从来没有回应如何解决它,所以我猜测有大量问题的人是服务器端问题。

对于一个很好的故障排除工具,使用osql而不是isql(实际上osql实际上使用isql来连接),因为它将逐步完成连接过程并为您提供有关发生故障的位置的详细信息。它是用来使用ISQL以同样的方式: osql <DSN> <user> <password>.

因此,正如我说,一定要检查你的服务器日志,如果你已经尝试了一切,并一直无法弄清楚的问题是什么。