Ruby i ODBC

Hej czego najlepiej uzywac w Ruby aby polaczyc sie z baza danych za pomoca drivera ODBC?

Gdy probuje uzywac DBI podczas testowego polaczenia:

[code]require “dbi”

make an ODBC connection

conn = DBI.connect(‘DBI:ODBC:exa_test’,‘user’,‘password’)

returns a list of the table names from your database

conn.tables

returns an array with the resultset from your query

rs = conn.select_all(‘SELECT * FROM TABLE’)
puts rs[/code]
dostaje komunikat bledu:

/usr/local/lib/site_ruby/1.8/dbi.rb:300:in `load_driver': Unable to load driver 'ODBC' (underlying error: uninitialized constant DBI::DBD::ODBC) (DBI::InterfaceError) from /usr/lib/ruby/1.8/monitor.rb:242:in `synchronize' from /usr/local/lib/site_ruby/1.8/dbi.rb:242:in `load_driver' from /usr/local/lib/site_ruby/1.8/dbi.rb:160:in `_get_full_driver' from /usr/local/lib/site_ruby/1.8/dbi.rb:145:in `connect' from connection.rb:4
W ubuntu 10.10 w pliku /etc/odbc.ini mam takie ustawienia:

[exa_test] DESCRIPTION = TEST DRIVER = /usr/local/lib32/libexaodbc-uo22.so EXAHOST = 192.168.01.01..86:8563
Nie rozumiem dlaczego nie moze zaladowac tego drivera

Zainstalowalem rowniez dbd-odbc ale w irb polecenie require ‘odbc’ zwraca mi:

LoadError: no such file to load -- odbc from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `gem_original_require' from /usr/local/lib/site_ruby/1.8/rubygems/custom_require.rb:36:in `require' from (irb):5

teraz dostaje taki blad:

/usr/local/lib/site_ruby/1.8/dbd/odbc/driver.rb:36:in `connect': INTERN (0) [RubyODBC]Cannot allocate SQLHENV (DBI::DatabaseError) from /usr/local/lib/site_ruby/1.8/dbi/handles/driver.rb:33:in `connect' from /usr/local/lib/site_ruby/1.8/dbi.rb:148:in `connect' from connection.rb:6

Hej czy moze ktos napotkal podobny problem?

undefined method `driver_name' for ODBC:Module

Ruby 1.9.2-p318, Rails 3.2.2

Zainstalowane gemy:
actionmailer (3.2.3, 3.2.2)
actionpack (3.2.3, 3.2.2)
activemodel (3.2.3, 3.2.2)
activerecord (3.2.3, 3.2.2, 1.15.6)
activerecord-odbc-adapter (2.0)
activeresource (3.2.3, 3.2.2)
activesupport (3.2.3, 3.2.2, 1.4.4)
arel (3.0.2)
blueprint-rails (0.1.2)
builder (3.0.0)
bundler (1.1.3)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
daemons (1.1.8)
dbd-mysql (0.4.4)
dbd-odbc (0.2.5)
dbi (0.4.5)
delayed_job (3.0.1)
delayed_job_active_record (0.3.2)
deprecated (2.0.1)
erubis (2.7.0)
execjs (1.3.0)
hike (1.2.1)
i18n (0.6.0)
journey (1.0.3)
jquery-rails (2.0.1)
json (1.7.1, 1.6.5)
libv8 (3.3.10.4 x86_64-linux)
mail (2.4.4, 2.4.3)
metaclass (0.0.1)
mime-types (1.18, 1.17.2)
mocha (0.10.5)
multi_json (1.3.4, 1.1.0)
mysql (2.8.1)
odbc-rails (1.5)
polyglot (0.3.3)
rack (1.4.1)
rack-cache (1.2)
rack-ssl (1.3.2)
rack-test (0.6.1)
rails (3.2.3, 3.2.2)
railties (3.2.3, 3.2.2)
rake (0.9.2.2)
rdoc (3.12)
request-log-analyzer (1.12.2)
ruby-odbc (0.99994)
rufus-scheduler (2.0.16)
sass (3.1.15)
sass-rails (3.2.4)
sprockets (2.1.3, 2.1.2)
test-unit (2.4.8)
therubyracer (0.10.1)
thor (0.14.6)
tilt (1.3.3)
treetop (1.4.10)
tzinfo (0.3.33, 0.3.32)
uglifier (1.2.3)
writeexcel (0.6.12)

uname -a

Linux pc-System-Product-Name 3.2.0-24-generic #37-Ubuntu SMP Wed Apr 25 08:43:52 UTC 2012 i686 i686 i386 GNU/Linux

odbc.ini

[EXA] DRIVER = /usr/lib/EXASolution/lib64/libexaodbc-uo22.so EXAHOST = 192.168.235.84..86:8563
Kod odpowiedzialny za polaczenie:

[code]require ‘rubygems’
require ‘dbi’
require ‘odbc’

class Exasol

@@admin_email = "lukasz.wlodarczyk@sponsorpay.com"

def initialize(login, password)
@login = login
@password = password
end

def connect
begin
#connect to the Exasol Server
@dbh = DBI.connect(‘dbi:ODBC:EXA’, @login, @password)
rescue DBI::DatabaseError => e
puts “An error occured”
puts “Error code: #{e.err}”
puts “Error message: #{e.errstr}”
err_message = “#{e.errstr}”
AlertMailer.send_alert(@@admin_email, err_message).deliver
end
end

end[/code]
Komunikat bledu:

scheduler caught exception: Could not load driver (undefined method `driver_name' for ODBC:Module) /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:319:in `rescue in load_driver' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:242:in `load_driver' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:160:in `_get_full_driver' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:145:in `connect' /home/pc/QA/qa_application_ubuntu/lib/exasol.rb:17:in `connect' /home/pc/QA/qa_application_ubuntu/app/models/report.rb:164:in `create_connection' /home/pc/QA/qa_application_ubuntu/app/models/report.rb:113:in `generate_daily_report' /home/pc/QA/qa_application_ubuntu/config/initializers/task_scheduler.rb:10:in `block in <top (required)>' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/rufus-scheduler-2.0.16/lib/rufus/sc/jobs.rb:229:in `call' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/rufus-scheduler-2.0.16/lib/rufus/sc/jobs.rb:229:in `trigger_block' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/rufus-scheduler-2.0.16/lib/rufus/sc/jobs.rb:189:in `block in trigger' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/rufus-scheduler-2.0.16/lib/rufus/sc/scheduler.rb:416:in `call' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/rufus-scheduler-2.0.16/lib/rufus/sc/scheduler.rb:416:in `block in trigger_job'
Moge nawiazac polaczenie z baza za pomoca isql:

isql EXA "login" "password" +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>

A w config/database.yml masz odpowiedni wpis dla tej bazy?

Hej, nie uzywam config/database.yml

Polaczenie nawiazuje poprzez:

@dbh = DBI.connect('dbi:ODBC:EXA', @login, @password)

i tutaj w tym momencie pojawia sie blad. Gdy probuje nawiazac polaczenie. Problem w tym ze na ubuntu 32bit dziala to bez problemu.

Dla tej wersji uzywam Ruby:
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

I tych gemow:
aaronh-chronic (0.3.9)
abstract (1.0.0)
actionmailer (3.2.2, 3.0.9)
actionpack (3.2.2, 3.0.9)
activemodel (3.2.2, 3.0.9)
activerecord (3.2.2, 3.0.9)
activeresource (3.2.2, 3.0.9)
activesupport (3.2.2, 3.0.9)
addressable (2.2.6)
archive-tar-minitar (0.5.2)
arel (3.0.2, 2.0.10)
blueprint-rails (0.1.2)
builder (3.0.0, 2.1.2)
bundler (1.0.17)
capistrano (2.8.0)
capistrano_colors (0.5.4)
capper (0.6.3, 0.3.6)
chronic (0.6.2)
coffee-rails (3.2.2)
coffee-script (2.2.0)
coffee-script-source (1.2.0)
columnize (0.3.4)
crack (0.1.8)
curb (0.7.16, 0.7.15)
daemons (1.1.8)
data_objects (0.10.7)
dbi (0.4.5)
delayed_job (3.0.1)
delayed_job_active_record (0.3.2)
delorean (1.1.0)
deprecated (2.0.1)
domain_name (0.5.2)
erubis (2.7.0, 2.6.6)
execjs (1.3.0)
factory_girl (2.0.3)
factory_girl_rails (1.1.0)
geoip (1.1.1)
highline (1.6.2)
hike (1.2.1)
i18n (0.6.0, 0.5.0)
ip2country (0.0.2)
journey (1.0.3)
jquery-rails (2.0.1)
json (1.6.5, 1.5.4)
kgio (2.6.0)
libv8 (3.3.10.4 x86-linux)
linecache19 (0.5.12)
mail (2.4.3, 2.2.19)
mechanize (2.1)
metaclass (0.0.1)
mime-types (1.17.2, 1.16)
mocha (0.10.5, 0.9.12)
multi_json (1.1.0)
mynyml-redgreen (0.7.1)
mysql (2.8.1)
net-http-digest_auth (1.2)
net-http-persistent (2.3.3)
net-scp (1.0.4)
net-sftp (2.0.5)
net-ssh (2.2.0, 2.1.4)
net-ssh-gateway (1.1.0)
nokogiri (1.5.0)
ntlm-http (0.1.1)
parseexcel (0.5.2)
polyglot (0.3.3, 0.3.1)
rack (1.4.1, 1.2.3)
rack-cache (1.2)
rack-mount (0.6.14)
rack-rewrite (1.1.0)
rack-ssl (1.3.2)
rack-test (0.6.1, 0.5.7)
rails (3.2.2, 3.0.9)
railties (3.2.2, 3.0.9)
raindrops (0.7.0)
rake (0.9.2.2, 0.9.2, 0.8.7)
rdoc (3.12, 3.8)
request-log-analyzer (1.12.2)
ruby-debug-base19 (0.11.25)
ruby-debug19 (0.11.6)
ruby-odbc (0.99994)
ruby-ole (1.2.11.3)
ruby_core_source (0.1.5)
rubygems-update (1.8.8, 1.6.2)
rufus-scheduler (2.0.16)
sass (3.1.15)
sass-rails (3.2.4)
shoulda (3.0.1, 2.11.3)
shoulda-context (1.0.0)
shoulda-matchers (1.0.0)
simplecov (0.4.2)
simplecov-html (0.4.5)
simplecov-rcov (0.2.0)
sinatra (1.2.6)
spork (0.9.0)
spork-testunit (0.0.7)
spreadsheet (0.7.1)
sprockets (2.1.2)
sqlite3 (1.3.4, 1.3.3)
sqlite3-ruby (1.3.3)
syslogger (1.2.5)
term-ansicolor (1.0.7)
test-unit (2.4.8, 2.3.1)
therubyracer (0.10.1)
thor (0.14.6)
tilt (1.3.3, 1.3.2)
treetop (1.4.10, 1.4.9)
typhoeus (0.3.2)
tzinfo (0.3.32, 0.3.29)
uglifier (1.2.3)
unf (0.0.4)
unf_ext (0.0.4)
unicorn (4.0.1)
watchr (0.7)
webmock (1.7.1)
webrobots (0.0.13)
whenever (0.6.8)
writeexcel (0.6.12)
yajl-ruby (0.8.3)

Wersja drivera jest 32bit dla tej bazy.

Uruchomilem irb i dziala, nie moge tylko zroyumiec dlaczego w aplikacji rails nie. Czy to jest jakis problem z DBI?

1.9.2p318 :001 > require 'dbi' => true 1.9.2p318 :002 > dbh = DBI.connect('DBI:ODBC:EXA', 'login', 'pswd') => #<DBI::DatabaseHandle:0x00000001cdc5c0 @handle=#<DBI::DBD::ODBC::Database:0x00000001cdc610 @handle=#<ODBC::Database:0x00000001cdc688>, @attr={}>, @trace_output=nil, @trace_mode=nil, @convert_types=true, @driver_name="odbc">

1.9.2p318 :006 > ODBC.datasources => [#<ODBC::DSN:0x00000001c75c80 @name="EXA", @descr="/usr/lib/EXASolution/lib64/libexaodbc-uo22.so">] 1.9.2p318 :007 >
Ten sam kod nie dziala w aplikacji Rails

Problem jest w pliku dbi.rb z metoda driver_name:

Could not load driver (undefined method `driver_name' for ODBC:Module) /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:318:in `rescue in load_driver' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:242:in `load_driver' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:160:in `_get_full_driver' /home/pc/.rvm/gems/ruby-1.9.2-p318@rails322/gems/dbi-0.4.5/lib/dbi.rb:145:in `connect'

A w config/database.