2011-01-13 4 views
12

Je rencontre des problèmes pour connecter Ruby à Microsoft SQL Server. J'utilise Mac OS X, mais l'environnement cible est Ubuntu Linux.Ruby se connecter à SQL Server

Voici ce que j'ai essayé:

  • Installer unixODBC
  • Installer FreeTDS
    • utilisé les options --with-unixodbc=/usr/local/etc--with-tdsver=8.0

j'avais alors ces fichiers /usr/local/etc:

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

J'ai ajouté une référence au pilote FreeTDS dans le fichier odbcinst.ini à mon fichier pilote ODBC comme ceci:

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

Puis j'ai configuré le serveur dans le fichier freetds.conf comme ceci:

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

Et finalement j'ajouté la source de données ODBC dans le fichier odbc.ini comme ceci:

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

Je peux vérifier que mon serveur est en ligne et le port est ouvert (via telnet & yougetsignal.com vérification du port).

En tant que test, je l'ai fait:

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

et il semblait se connecter très bien. La transmission de valeurs non valides entraîne des erreurs attendues.

Donc finalement à ma question:

Comment puis-je prolonger ce à Ruby? Rien de ce que j'ai essayé jusqu'ici n'a fonctionné. J'ai essayé Sequel comme ceci:

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

Et je reçois une erreur comme ceci:

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

Ce qui me dit qu'il est de trouver correctement ma configuration du pilote, mais pour une raison quelconque ne peut pas se connecter.

J'ai essayé aussi DBI comme ceci:

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

Et je reçois une erreur semblable.

Des suggestions? Je me sens comme si je suis très proche, mais je ne suis pas sûr de ce qu'il faut essayer à côté de résoudre ce problème.

+1

'je peux vérifier que mon serveur est en ligne et le port est ouvert (via telnet & yougetsignal.com port check). Désolé, je ne peux pas répondre à votre question. Cependant, vous devez savoir que l'exposition de SQL Server à Internet risque d'entraîner un problème de sécurité. Divers robots analysent SQL Server et essaient de se connecter/attaquer. –

+0

Vous devez utiliser l'IRM? Tu ne peux pas utiliser JRuby et JDBC? – Luke

+0

@will - Merci d'avoir signalé cela. Je suis très conscient de la gravité de ce problème, mais dans le système de production, je vais le verrouiller par adresse IP et changer le port. J'essaie simplement de valider que toutes ces pièces fonctionnent ensemble. –

Répondre

13

un coup d'oeil à https://github.com/rails-sqlserver/tiny_tds TinyTds - Un FreeTDS moderne, simple et rapide bibliothèque Ruby en utilisant DB-Library

Il est facile à installer et facile à utiliser

+0

Drôle je n'ai pas trouvé cela dans toutes mes recherches. Je vais essayer et vous dire ce que je trouve. –

+0

Cela a fonctionné comme un champion! Merci pour la suggestion, cela fera bien. –

Questions connexes