2011-01-13 24 views
12

Tengo problemas para conectar Ruby a Microsoft SQL Server. Estoy ejecutando Mac OS X, pero el entorno de destino es Ubuntu Linux.Ruby conectado a SQL Server

Aquí es lo que he intentado:

  • Instalar unixODBC
  • Instalar FreeTDS
    • utilizan las opciones de --with-unixodbc=/usr/local/etc--with-tdsver=8.0

entonces que tenía en estos archivos /usr/local/etc:

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

he añadido una referencia al controlador FreeTDS en el archivo odbcinst.ini a mi archivo del controlador ODBC de la siguiente manera:

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

Luego configuré el servidor en el archivo freetds.conf así:

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

Y finalmente añadió el ODBC DSN en el archivo odbc.ini así:

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

puedo comprobar que mi servidor está en línea y el puerto está abierto (a través de telnet & verificación del puerto yougetsignal.com).

Como prueba, lo hice:

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

y parecía conectar muy bien. Pasar en valores no válidos resultó en errores esperados.

Así que, finalmente, a mi pregunta:

¿Cómo extender esto a Ruby? Nada de lo que he intentado hasta ahora ha funcionado. Probé secuela de esta manera:

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

Y consigo un error como este:

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

¿Qué me dice que es encontrar mi configuración del controlador correctamente, pero por alguna razón no se puede conectar.

También probé DBI así:

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

y recibo un error similar.

¿Alguna sugerencia? Siento que estoy muy cerca, pero no estoy seguro de qué probar a continuación para solucionar este problema.

+1

'puedo comprobar que mi servidor es en línea y el puerto está abierto (a través de telnet y yougetsignal.com check del puerto). Lo siento, no puedo responder su pregunta. Sin embargo, debe saber que exponer SQL Server a Internet puede generar un problema de seguridad. Varios bots escanean SQL Server e intentan conectarlo/atacarlo. –

+0

¿Tienes que usar MRI? ¿No puedes usar JRuby y JDBC? – Luke

+0

@will - Gracias por señalarlo. Soy muy consciente de lo malo que es eso, pero en el sistema de producción lo bloquearé por la dirección IP y cambiaré el puerto. Solo intento validar que todas estas piezas funcionen juntas. –

Respuesta

13

echar un vistazo a https://github.com/rails-sqlserver/tiny_tds TinyTds - Una biblioteca FreeTDS modernas, sencillas y rápidas para Ruby mediante DB-Library

Es fácil de instalar y fácil de usar

+0

Gracioso No encontré esto en toda mi búsqueda. Lo intentaré y te haré saber lo que encuentro. –

+0

¡Esto funcionó como un campeón! Gracias por la sugerencia, esto funcionará muy bien. –

Cuestiones relacionadas