2011-06-16 105 views
1

注意:這是一個轉發。此問題之前因爲未公開的原因而被刪除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 

回答

0

好吧,我終於想通了之後只有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領域成爲之間的唯一真正的區別驅動程序的實際文件名,而不是爲某些配置條目命名的。

3

如果有人得到了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>.

因此,正如我說,一定要檢查你的服務器日誌,如果你已經嘗試了一切,並一直無法弄清楚的問題是什麼。