Кто-нибудь успешно подключился к SQL Server с 64-битной Mac OS X 10.6 (Snow Leopard) с использованием драйвера ODBC Actual Technologies *?Меня не интересует использование драйвера iODBC Unix.
Для Ruby 1.8.7 у меня есть:
- dbi (0.4.5)
- dbd-odbc(0.2.5)
- ruby-odbc (0.99992)
Вот мой простой скрипт на Ruby:
require 'rubygems'
require 'dbi'
db = DBI.connect('DBI:ODBC:MyDSN', 'user', 'password')
begin
result = db.execute('SELECT name FROM sys.databases')
while row = result.fetch do
puts row.to_s
end
ensure
db.disconnect if db
end
Я также пробовал это с помощью ActiveRecord:
- activerecord (1.15.6)
- activerecord-sqlserver-adapter (3.0.5)
Сценарий:
require 'rubygems'
gem 'activerecord'
require 'active_record'
require 'logger'</p>
<p>ActiveRecord::Base.logger = Logger.new(STDOUT)</p>
<p>ActiveRecord::Base.establish_connection(
:adapter => 'sqlserver',
:mode => 'odbc',
:dsn => 'MyDSN',
:username => 'user',
:password => 'password'
)</p>
<p>result = ActiveRecord::Base.connection.execute 'SELECT name FROM sys.databases'</p>
<p>while r = result.fetch_row
puts r
end
Однако при выборке ошибка примеров DBI и ActiveRecord с ошибкой сегментации:
/opt/local/lib/ruby/gems/1.8/gems/dbi-0.4.5/lib/dbd/odbc/statement.rb:43: [BUG] Segmentation fault
ruby 1.8.7 (2010-08-16 patchlevel 302) [i686-darwin10]
В Ruby 1.9.2 больше информации об ошибке:
/Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41: [BUG] Segmentation fault
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10]</p>
<p>-- control frame ----------
c:0006 p:---- s:0022 b:0022 l:000021 d:000021 CFUNC :fetch
c:0005 p:0014 s:0019 b:0018 l:000017 d:000017 METHOD /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41
c:0004 p:0139 s:0014 b:0014 l:000013 d:000013 METHOD /Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:220
c:0003 p:0102 s:0009 b:0009 l:001588 d:0001e0 EVAL ss_dbi.rb:7
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH</p>
<h2>c:0001 p:0000 s:0002 b:0002 l:001588 d:001588 TOP</h2>
<p>-- Ruby level backtrace information ----------------------------------------
ss_dbi.rb:7:in <code><main>'
/Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbi-0.4.5/lib/dbi/handles/statement.rb:220:in</code>fetch'
/Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in <code>fetch'
/Users/ejstembler/.rvm/gems/ruby-1.9.2-p0/gems/dbd-odbc-0.2.5/lib/dbd/odbc/statement.rb:41:in</code>fetch'</p>
<p>-- C level backtrace information -------------------------------------------
Я не знаком с чтением этого типа дампа ошибок, однако, если бы я догадался, я бы сказал, что fetch - это последнее, что вызывается для вызова функции C (CFUNC).Я не уверен, является ли функция C частью гема, библиотеки Ruby или самого драйвера ODBC.
Есть идеи?