Проблема с SQL Server и Rails - PullRequest
       30

Проблема с SQL Server и Rails

1 голос
/ 17 июня 2011

примечание: это репост.Этот вопрос был ранее удален по нераскрытым причинам

Хорошо, я пытался заставить это работать как весь день, и я едва отошел от того, когда я начал.

Я пытаюсь подключить Ruby On Rails к SQL Server.Я установил unixODBC, настроил его и FreeTDS и установил почти все гемы Ruby, относящиеся к ODBC, которые существуют.

( Это было обновлено , чтобы показать вывод isql с -v)

[earlz@earlzarch myproject]$ tsql -S AVP1 -U sa -P pass
locale is "en_US.UTF-8"
locale charset is "UTF-8"
1> quit
[earlz@earlzarch ~]$ isql -v AVP1 sa pass
[IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified
[ISQL]ERROR: Could not SQLConnect
[earlz@earlzarch myproject]$ rake db:version
(in /home/earlz/myproject)
rake aborted!
IM002 (0) [unixODBC][Driver Manager]Data source name not found, and no default driver specified

(See full trace by running task with --trace)

, так что, как вы можете видеть, tsql работает, но не isql.Какая разница в двух, что ломает его?

/ etc / odbc.ini

[AVP1]
      Description     = ODBC connection via FreeTDS
      Driver = TDS
      Servername      = my.server
      UID = sa
      PWD = pass
      port = 1232
      Database        = mydatabase

/ etc / odbcinst.ini

[TDS]
     Description     = v0.6 with protocol v7.0
     Driver          = /usr/lib/libtdsodbc.so
     Setup           = /usr/lib/libtdsS.so
     CPTimeout       =
     CPReuse         =
     FileUsage       = 1

(и да, я убедился, что .soфайлы существуют)

соответствующая часть в freetds.conf

[AVP1]
      host = my.server
      port = 1232
      tds version = 8.0

и, наконец, мой database.yml

development:
    adapter: sqlserver
    mode: odbc
    dsn: AVP1
    username: sa
    password: pass

Может кто-нибудь, пожалуйста, помогите мне, прежде чем я потяну все мои волосы выпали?

Я использую 64-разрядную версию Arch Linux, которая полностью обновлена.

Что может вызывать сбой isql.Я пробовал каждое решение, которое я видел до сих пор для этой проблемы, но ни одно из них на самом деле не работает для меня.Должен ли я перекомпилировать FreeTDS или что-то?

Хорошо, я также проверил с помощью strace, что он находит файл конфигурации, как показано в этом отрывке:

open("/etc/odbc.ini", O_RDONLY)         = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=159, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fc71fe09000
read(3, "[AVP1]\n      Description = ODBC "..., 4096) = 159

Ответы [ 3 ]

3 голосов
/ 05 сентября 2012

Если кто-то заставил tsql работать, но искал повсюду в интернете и устранял неполадки в их конфигурациях, но все еще не смог заставить isql работать, проверьте журналы вашего сервера.

В течение недели я устранял неполадки при установке и настройке Xubuntu 12.04 unixodbc и пытался сделать все возможное, чтобы исправить это, когда я решил проверить окно просмотра событий на своем сервере Windows, чтобы посмотреть, что происходит, когда запрос поступает на сервер или если запрос даже приходил на сервер и обнаруживал, что проблема была в том, что я не мог попасть в конкретную базу данных. Я смог нормально войти в SQL Server, но не в ту базу данных, которую я перечислил в моем файле odbc.ini.

Вот конкретный текст в журнале событий "Ошибка входа пользователя 'ePMX'.

Причина: не удалось открыть явно указанную базу данных. [КЛИЕНТ: 192.168.27.25]».

То, что вызвало у меня интерес, было слово «явный». Поэтому я просто закомментировал Database = <DB Name>, и вдруг все заработало, и я получил приглашение SQL после неисчислимых часов исследования и попытки сделать все возможное.

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

Для отличного средства устранения неполадок используйте osql, а не isql (фактически, для подключения osql фактически использует isql), поскольку он будет шаг за шагом проходить процесс подключения и сообщать вам подробности того, где произошел сбой. Он используется так же, как вы используете isql: osql <DSN> <user> <password>.

Итак, как я уже сказал, обязательно проверьте журналы вашего сервера, если вы попробовали все остальное и не смогли выяснить, в чем проблема.

0 голосов
/ 17 июня 2011

При создании FreeTDS текущим версиям SQL Server необходим протокол TDS v8 (http://www.freetds.org/userguide/config.htm):

./configure --with-tdsver=8.0 --enable-msdblib
0 голосов
/ 17 июня 2011

Хорошо, я наконец-то понял это после всего двух дней подряд, стуча головой о стену.

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

[earlz@earlzarch ~]$ cat /etc/odbc.ini
[AVP1]
Description=ODBC connection via FreeTDS
Driver=/usr/lib/libtdsodbc.so
Server=192.168.0.100
UID=sa
PWD=pass
Port=1232
ReadOnly=No
[earlz@earlzarch ~]$ cat /etc/odbcinst.ini
[TDS]
     Description     = v0.60 with protocol v7.0
     Driver          = /usr/lib/libtdsodbc.so
     Driver64 = /usr/lib
     Setup           = /usr/lib/libtdsS.so
     Setup64 = /usr/lib
     CPTimeout       =
     CPReuse         =
     FileUsage       = 1
[earlz@earlzarch ~]$ cat /etc/freetds/freetds.conf
[global]
        tds version = 8.0
        initial block size = 512
        swap broken dates = no
        swap broken money = no
        try server login = yes
        try domain login = no
        cross domain login = no
        # If you get out-of-memory errors, it may mean that your client
        # is trying to allocate a huge buffer for a TEXT field.
        # Try setting 'text size' to a more reasonable limit
        text size = 64512

[TDS]
        host = 192.168.0.100
        port = 1232
        tds version = 8.0

и если вам повезет, после этого:

[earlz@earlzarch ~]$ isql -v AVP1
[S1000][unixODBC][FreeTDS][SQL Server]Unable to connect to data source
[01000][unixODBC][FreeTDS][SQL Server]Adaptive Server connection failed
[ISQL]ERROR: Could not SQLConnect
[earlz@earlzarch ~]$ isql -v AVP1 sa pass
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

Мне не нужно было устанавливать какие-либо переменные среды, и мне не нужно было ничего компилировать вручную с Arch Linux 64bit (дата 7 апреля 2010 г.). После запуска isql Rails также немедленно подключился к базе данных. Теперь я просто должен выяснить, почему db:schema:load не работает, но это другой вопрос :)

Кроме того, обратите внимание, что единственное реальное различие между этим набором файлов и последним заключается в /etc/odbc.ini Я установил в поле Driver реальное имя файла драйвера, а не имя для какой-либо записи конфигурации.

...