2011-01-13 14 views
12

Ich habe Probleme beim Verbinden von Ruby mit Microsoft SQL Server. Ich verwende Mac OS X, aber die Zielumgebung ist Ubuntu Linux.Ruby Verbindung zu SQL Server

Hier ist, was ich versucht habe:

  • unixODBC
  • FreeTDS
    • die Optionen installieren Installieren --with-unixodbc=/usr/local/etc--with-tdsver=8.0
    • verwendet

ich diese Dateien dann hatte in /usr/local/etc:

  • odbc.ini
  • odbcinst.ini
  • freetds.conf

ich einen Verweis auf den FreeTDS Treiber in der odbcinst.ini Datei auf meine ODBC-Treiber-Datei wie folgt hinzugefügt:

; 
; odbcinst.ini 
; 
; 
[FreeTDS] 
Driver = /usr/local/lib/libtdsodbc.so 

Dann habe ich konfiguriert der Server in der freetds.conf-Datei wie folgt:

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

Und schließlich habe ich den ODBC-DSN in der odbc.ini-Datei wie folgt:

[aries-db1] 
Driver  = FreeTDS 
Description = ODBC Connection via FreeTDS 
Trace  = 1 
Servername = aries-db1 
Database = MY_DB 
UID   = user1 
PWD   = pass1 

Ich kann bestätigen, dass mein Server online ist und der Port offen ist (über Telnet & yougetsignal.com Port Check).

Als Test, ich habe dies:

tsql -S aries-db1 -U user1 -P pass1 

Und es schien ganz gut zu verbinden. Das Übergeben ungültiger Werte führte zu erwarteten Fehlern.

So endlich zu meiner Frage:

Wie erweitere ich das Ruby? Nichts, was ich bisher versucht habe, hat funktioniert. Ich habe versucht, Sequel wie folgt aus:

require 'sequel' 
Sequel.connect('aries-db1')['select * from foo'].all 

Und ich bekomme ein Fehler wie folgt aus:

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

Was mich erzählt wird meine Treiberkonfiguration richtig zu finden, aber aus irgendeinem Grund keine Verbindung herstellen können.

Ich habe auch versucht DBI wie folgt aus:

DBI.connect('DBI:ODBC:aries-db1') 

Und ich einen ähnlichen Fehler.

Irgendwelche Vorschläge? Ich fühle mich, als wäre ich sehr nah dran, aber ich bin mir nicht sicher, was ich als nächstes versuchen sollte, um das Problem zu beheben.

+1

'zu verwenden, kann ich feststellen, ob mein Server Online und der Port ist offen (über Telnet & Yougetsignal.com Port Check). "Leider kann ich Ihre Frage nicht beantworten. Sie sollten jedoch wissen, dass das Offenlegen von SQL Server mit dem Internet wahrscheinlich zu einem Sicherheitsproblem führt. Verschiedene Bots scannen nach SQL Server und versuchen, sie zu verbinden/anzugreifen. –

+0

Müssen Sie MRT verwenden? Kannst du JRuby und JDBC nicht benutzen? – Luke

+0

@will - Vielen Dank, dass Sie darauf hingewiesen haben. Ich bin mir sehr bewusst, wie schlimm das ist, aber im Produktivsystem werde ich es durch IP-Adresse sperren und den Port ändern. Ich versuche nur zu bestätigen, dass all diese Teile zusammen funktionieren. –

Antwort

13

haben einen Blick auf https://github.com/rails-sqlserver/tiny_tds TinyTds - Eine moderne, einfache und schnelle FreeTDS Bibliothek für Ruby mit DB-Library

Es ist einfach zu installieren und einfach

+0

Komisch, ich habe das nicht in meiner Suche gefunden. Ich werde es versuchen und Sie wissen lassen, was ich finde. –

+0

Das funktionierte wie ein Champion! Danke für den Vorschlag, das wird gut tun. –