2010-06-10 3 views
0

Я использую MSSQL 2005 с Rails уже довольно давно и решил поднять мои драгоценные камни на один из моих проектов и столкнулся с проблемой.Модернизированный activerecord-sqlserver-адаптер от 2.2.22 до 2.3.8 и теперь получает ошибку ODBC

я переехал из 2.2.22 до 2.3.8 (последний в письменной форме), и вдруг я получил это:

ODBC::Error: S1090 (0) [unixODBC][Driver Manager]Invalid string or buffer length 

Я использую соединение DSN с FreeTDS мой database.yml выглядит следующим образом :

adapter: sqlserver 
mode: ODBC 
dsn: 'DRIVER=FreeTDS;TDSVER=7.0;SERVER=10.0.0.5;DATABASE=db;Port=1433;UID=user;PWD=pwd;' 

Теперь в то же время я вернулся в 2.2.22 и нет устаревания предупреждения и все, кажется, хорошо, но, очевидно, ради того, чтобы быть в курсе, какие-либо идеи, что могло бы изменить в адаптере что может вызвать это?

+0

Мне нужно задаться вопросом, почему вы используете адаптер activerecord-sqlserver, когда вы на самом деле проходите через ODBC? Я бы порекомендовал проверить [эту страницу] (http://odbc-rails.rubyforge.org/), которая проведет вас через то, что происходит с правильной настройкой ODBC, что, в свою очередь, позволит вам сменить Rails приложения от SQL Server до любой другой ODBC-доступной цели, если это желательно. Правильно написанное клиентское приложение ODBC использует примитивы ODBC и escape-запросы в запросах - и * драйвер * адаптирует их к целевому API СУБД. Рельсы не должны заботиться о том, какие СУБД вы бьете. – TallTed

ответ

1

Вы должны использовать TinyTDS с адаптером, а не ODBC. У меня есть поддержка TinyTDS даже в последних версиях 2.3. Вот страница wiki.

https://github.com/rails-sqlserver/activerecord-sqlserver-adapter/wiki/Using-TinyTds

Хорошая вещь о TinyTDS является то, что она испытывается вернуть хорошие данные из любого типа на SQL Server и является безопасным юникода.

-1

У меня была аналогичная проблема. Удаление адаптера activerecord-sqlserver и использование адаптера activerecord-odbc (версия 2.0). Работает на меня.

Я только что удалил activerecord-sqlserver-adapter, dbi и dbd-odbc. А потом установить ActiveRecord-ODBC-адаптер и изменил мою дб конфигурации, чтобы быть чем-то вроде

your_database: 
    adapter: odbc 
    dsn: YourDNS 
    username: YourUsername 
    password: YourPassword 

Работает сладкий:)

+0

Это выглядит намного приятнее, но как Rails знает, как использовать адаптер sqlserver, или, более конкретно, ActiveRecord изменяет его запросы специально для MSSQL? – stuartc

+0

Я действительно не понимаю, это извините. Но я думаю, что activerecord-odbc-адаптер говорит с FreeTDS, который стажер разговаривает с сервером sql. Во всяком случае, мое приложение rails отлично работает без адаптера activerecord-sqlserver. Но я только называю хранимые procs на серверах sql, так что, возможно, это не будет работать для обычных запросов. Однако стоит попробовать. Удачи. – Andrew

+0

TinyTDS намного проще, и серверный адаптер sql (а не odbc) настолько хорошо протестирован и действительно использует все, что требуется SQL Server. – MetaSkills