2012-01-12 2 views
0

На моем Windows 7 поле, я установил Рубин 1.9.2 и установлены следующие камни:Как правильно установить Ruby's DBI gem, чтобы он мог разговаривать с MySql?

* Местное GEMS *

  • DBD-MySQL (0.4.4)
  • DBI (0.4.5)
  • осуждается (2.0.1)
  • HTTParty (0.8.1)
  • RubyGems-обновление (1.8.15)

(я сделал это используя gem install).

Я также написал следующую простую тестовую:

require 'rubygems' 
require 'dbi' 

begin 
    dbh = DBI.connect("DBI:Mysql:test", "username", "pwd") 

    row = dbh.select_one("SELECT VERSION()") 
    puts "Server Version: "+row[0] 
rescue DBI::DatabaseError => e 
    puts "An error occurred" 
    puts "Error code: #{e.err}" 
    puts "Error message: #{e.errstr}" 
ensure 
    # disconnect from server 
    dbh.disconnect if dbh 
end 

Независимо от того, как я указать строку соединения, я получаю:

C:\Code\Concordance.SE>ruby test_sql.rb 
C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/dbi-0.4.5/lib/dbi.rb:300:in `block in 
load_driver': Unable to load driver 'Mysql' (underlying error: uninitialized con 
stant DBI::DBD::Mysql) (DBI::InterfaceError) 
     from C:/Tools/Ruby192/lib/ruby/1.9.1/monitor.rb:201:in `mon_synchronize' 

     from C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/dbi-0.4.5/lib/dbi.rb:242: 
in `load_driver' 
     from C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/dbi-0.4.5/lib/dbi.rb:160: 
in `_get_full_driver' 
     from C:/Tools/Ruby192/lib/ruby/gems/1.9.1/gems/dbi-0.4.5/lib/dbi.rb:145: 
in `connect' 
     from test_sql.rb:4:in `<main>' 

}

Что я делаю неправильно?

+0

(Очевидно, что я не делюсь своим настоящим именем пользователя или pwd :) –

+0

Как подсказка для облегчения вашей жизни, я бы рекомендовал использовать один из ORM Ruby, а не интерфейс DBI. [ActiveRecord] (http://ar.rubyonrails.org/), который является частью Rails, может использоваться отдельно, а [Sequel] (http://sequel.rubyforge.org/), который является моим фаворитом, является автономный. Преимущество ORM заключается в том, что вы получаете SQL-генерацию, которая хорошо написана и может легко переходить от одного DBM к другому, не беспокоясь об изменении вашего SQL. –

+0

За что же стоило, я успешно выполнил ваш код на linux с теми же версиями dbi, dbd-mysql и устарел. Он работал как с рубигемами, так и без них. Кажется, я вспоминаю начальную душевную боль, когда я установил dbi, я буду мешать и посмотреть, могу ли я увидеть, связаны ли мои проблемы с вашими. – forforf

ответ

1

Нашел ответ на мою проблему в этом question.

Когда вы запускаете Ruby в 64-разрядной операционной системе, вам нужно скопировать новую версию libMySql.dll в каталог Ruby \ bin. Лучшим источником для этой DLL является here.

+0

Итак, ответ на мой первоначальный вопрос, как это часто бывает, «Что я делаю неправильно?» «Вы используете Windows!» –

+0

Рад, что вы решили. Использование DBI может быть немного больно, но иногда полезно иметь интерфейс низкого уровня, который другие ORM не предоставляют. – forforf

Смежные вопросы