Подключение к SQL-Azure в рельсах с использованием tiny_TDS: [BUG] Ошибка сегментации
Мы пытаемся заставить rails общаться с базой данных sqlserver в Azure, мы устанавливаем freeTDS с openssl и libiconv:
./configure --prefix=/usr/local --with-libiconv-prefix=DIR --with-openssl=DIR
make
make install
Затем мы добавляем tiny_TDS и activerecord-sqlserver-adapter в gemfile:
gem 'tiny_tds'
gem 'activerecord-sqlserver-adapter'
$ bundle install
Настройте базу данных:
development:
adapter: sqlserver
host: xxxxxxx.database.windows.net
mode: DBLIB
port: 1433
database: xxxxx
username: xxxxxxxx
password: x
azure: true
Запустите сервер:
$ rails s
До этого момента все прекрасно работает, но как только вы заходите на сайт, рубин вылетает.
steven@jenny:~/irr$ rails server -p 3001
=> Booting WEBrick
=> Rails 3.0.4 application starting in development on http://0.0.0.0:3001
=> Call with -d to detach
=> Ctrl-C to shutdown server
[2012-07-24 15:37:00] INFO WEBrick 1.3.1
[2012-07-24 15:37:00] INFO ruby 1.9.2 (2012-02-14) [x86_64-linux]
[2012-07-24 15:37:00] INFO WEBrick::HTTPServer#start: pid=7586 port=3001
/home/steven/.rvm/gems/ruby-1.9.2-p318/gems/tiny_tds-0.5.1/lib/tiny_tds/client.rb:68: [BUG] Segmentation fault
ruby 1.9.2p318 (2012-02-14 revision 34678) [x86_64-linux]
-- control frame ----------
c:0048 p:---- s:0232 b:0232 l:000231 d:000231 CFUNC :connect
c:0047 p:0429 s:0228 b:0228 l:000227 d:000227 METHOD /home/steven/.rvm/gems/ruby-1.9.2-p318/gems/tiny_tds-0.5.1/lib/tiny_tds/client.rb:68
Мы пробовали несколько версий ruby: 1.9.2-p318, 1.9.2-p320, 1.9.3-p125. Та же ошибка со всеми из них.
Это на Ubuntu 11.10 с использованием rvm и FreeTDS-0.9.1.
Любые идеи об обходном пути?
Я сделал ошибку где-нибудь по пути?
редактировать
Выход из IRB:
require 'tiny_tds'
client = TinyTds::Client.new(:username =>'XXXXX@XXXXXXX.database.windows.net', :password => 'XXXXXXX', :host => 'XXXXXX.database.windows.net', :mode => 'DBLIB', :azure => 'true')
SystemStackError: stack level too deep from /home/martinr/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/irb/workspace.rb:80
Maybe IRB bug!!
Кажется, это ошибка самого рубина:
/home/martinr/.rvm/gems/ruby-1.9.2-p320/gems/tiny_tds-0.5.1/lib/tiny_tds/client.rb:68: [BUG] Segmentation fault (core dumped)
2 ответа
Кажется, ошибка вызвана наличием имени пользователя username@servername
Когда вы удаляете @severname
часть, рубин больше не падает
Вы должны просто сделать простую подсказку IRB и сделать что-то подобное, упомянутое в TinyTDS, прочитайте меня.
require 'tiny_tds'
client = TinyTds::Client.new(...)
Заполните ваши параметры подключения. Простые вещи, такие как имя пользователя, пароль и хост. Дайте мне знать, как идут дела.