2011-01-13 18 views
12

Ho problemi a connettere Ruby a Microsoft SQL Server. Sto usando Mac OS X, ma l'ambiente di destinazione è Ubuntu Linux.Ruby che si connette a SQL Server

Ecco che cosa ho provato:

  • Installare unixODBC
  • Installare FreeTDS
    • utilizzate le opzioni --with-unixodbc=/usr/local/etc--with-tdsver=8.0

Ho poi avuto questi file nella /usr/local/etc:

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

ho aggiunto un riferimento al driver FreeTDS nel file odbcinst.ini al mio file del driver ODBC in questo modo:

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

Quindi ho configurato il server nel file freetds.conf in questo modo:

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

E finalmente ho aggiunto il DSN ODBC nel file odbc.ini in questo modo:

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

posso verificare che il mio server è in linea e la porta è aperta (via telnet & controllo della porta yougetsignal.com).

Come prova, ho fatto questo:

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

e sembrava collegare bene. Il passaggio di valori non validi ha comportato errori previsti.

Così alla fine alla mia domanda:

Come posso estendere questo a Ruby? Niente di quello che ho provato finora ha funzionato. Ho provato Sequel in questo modo:

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

E ottengo un errore come questo:

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

Il che mi dice che sta trovando la mia configurazione del driver in modo corretto, ma per qualche ragione non riesce a connettersi.

Ho anche provato DBI in questo modo:

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

e ottengo un errore simile.

Qualche suggerimento? Mi sento molto vicino, ma non sono sicuro di cosa provare per risolvere il problema.

+1

'posso verificare che il mio server è online e la porta è aperta (via telnet e yougetsignal.com controllo porta). 'Spiacente, non posso rispondere alla tua domanda. Tuttavia, è necessario sapere che l'esposizione di SQL Server a Internet può portare a un problema di sicurezza. Vari robot eseguono la scansione di SQL Server e tentano di collegarsi/attaccarlo. –

+0

Devi usare la risonanza magnetica? Non puoi usare JRuby e JDBC? – Luke

+0

@will - Grazie per avermelo fatto notare. Sono molto consapevole di quanto sia male, ma nel sistema di produzione lo bloccherò per indirizzo IP e cambiando la porta. Sto solo provando a convalidare che tutti questi pezzi funzionano insieme. –

risposta

13

dare un'occhiata a https://github.com/rails-sqlserver/tiny_tds TinyTds - Una biblioteca FreeTDS moderni, semplici e veloci per Ruby utilizzando DB-Library

sua facile da installare e facile da usare

+0

Divertente Non l'ho trovato in tutte le mie ricerche. Farò un tentativo e farti sapere cosa trovo. –

+0

Questo ha funzionato come un campione! Grazie per il suggerimento, questo andrà bene. –

Problemi correlati