Ruby подключается к SQL Server

У меня проблемы с подключением Ruby к Microsoft SQL Server. Я использую Mac OS X, но целевой средой является Ubuntu Linux.

Вот что я пробовал:

  • Установите unixODBC.
  • Install FreeTDS
    • used the options --with-unixodbc=/usr/local/etc --with-tdsver=8.0

Затем у меня были эти файлы в /usr/local/etc:

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

Я добавил ссылку на драйвер FreeTDS в файле odbcinst.ini в файл драйвера ODBC следующим образом:

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

Затем я настроил сервер в файле freetds.conf следующим образом:

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

И, наконец, я добавил DSN ODBC в файл odbc.ini следующим образом:

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

Я могу убедиться, что мой сервер подключен к сети и порт открыт (через проверку порта telnet и yougetsignal.com).

В качестве теста я сделал это:

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

И вроде нормально подключился. Передача недопустимых значений привела к ожидаемым ошибкам.

Итак, наконец, на мой вопрос:

Как мне расширить это на Ruby? Ничто из того, что я пробовал до сих пор, не сработало. Я пробовал Sequel следующим образом:

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

И получаю такую ​​ошибку:

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

Что говорит мне, что он правильно находит конфигурацию моего драйвера, но по какой-то причине не может подключиться.

Я также пробовал DBI следующим образом:

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

И я получаю аналогичную ошибку.

Какие-либо предложения? Я чувствую, что я очень близок, но не уверен, что делать дальше, чтобы устранить эту проблему.


person Ben Scheirman    schedule 13.01.2011    source источник
comment
I can verify that my server is online and the port is open (via telnet & yougetsignal.com port check). Извините, я не могу ответить на ваш вопрос. Однако вы должны знать, что доступ SQL Server к Интернету может привести к проблемам с безопасностью. Различные боты сканируют SQL Server и пытаются подключиться/атаковать его.   -  person    schedule 13.01.2011
comment
Обязательно ли использовать МРТ? Разве вы не можете использовать JRuby и JDBC?   -  person Luke    schedule 13.01.2011
comment
@will - Спасибо, что указали на это. Я прекрасно понимаю, насколько это плохо, но в производственной системе я буду блокировать его по IP-адресу и менять порт. Я просто пытаюсь подтвердить, что все эти части работают вместе.   -  person Ben Scheirman    schedule 13.01.2011
comment
У меня нет опыта работы с JDBC или JVM, но я бы сказал, что это возможно, просто вряд ли я бы выбрал это.   -  person Ben Scheirman    schedule 13.01.2011


Ответы (1)


Взгляните на https://github.com/rails-sqlserver/tiny_tds TinyTds — современный , простая и быстрая библиотека FreeTDS для Ruby с использованием DB-Library

Его легко установить и легко использовать

person Klaus    schedule 13.01.2011
comment
Забавно, я не нашел этого во всех моих поисках. Я попробую и дам вам знать, что я найду. - person Ben Scheirman; 13.01.2011
comment
Это сработало как чемпион! Спасибо за предложение, это будет хорошо. - person Ben Scheirman; 13.01.2011