Подключение к SQL Server с Mac через драйвер ODBC Actual Technologies - PullRequest
0 голосов
/ 03 ноября 2010

Кто-нибудь успешно подключился к 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.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 04 ноября 2010

Вы уже видели * ODBC-адаптер OpenLink Rails и ODBC-драйвер для SQL Server на Mac OS X, которые имеют определенные улучшения для работы с Ruby on Rails и были протестированы на MacOS X?

0 голосов
/ 22 мая 2012

Вы когда-нибудь понимали это?

Я использую Ruby-ODBC и ActiveRecord в Windows для запроса пользовательского драйвера:

    require "sinatra/activerecord"
    require "odbc"

Я написал следующее:

    maxwell = ODBC.connect("Maxwell")
    stmt = maxwell.run query

DSN («Maxwell») был настроен глобально (вне моего приложения Ruby), и мне не нужно было указывать драйвер, так как он уже был установлен в odbc.ini.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...