Mysql адаптер ActiveRecord в метании Ruby: «Пакеты вышли из строя» - PullRequest
1 голос
/ 03 февраля 2011

Ruby версия: 1.9.1 Mysql версия: 5.0

код был написан:

<code>
    require "rubygems"
    require "active_record"
    puts "1"
    class Source < ActiveRecord::Base
        puts "2"
        establish_connection(
                :adapter => "mysql",
                :host => "localhost",
                :username => "root",
                :password => "root@123",
                :database => "TrafficTracker"
            )
    end
    puts "3"
    traffic_source = Source.find(1)
    puts "4"
    puts traffic_source.source_name

Выше кода печатается до 3 и разрывается на Source.find (1) с ошибкой:

1 2 3 C: /Ruby/lib/ruby/1.9.1/mysql.rb: 1019: в read': Packets out of order: 0<> (RuntimeError)<br> from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:in read ' из C: /Ruby/lib/ruby/1.9.1/mysql.rb: 110: в real_connect' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:600:in connect ' из C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb: 164: в initialize' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:36:in new ' из C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb: 36: в mysql_connection' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:228:in new_connection ' из C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb: 236: в checkout_new_connection' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:190:in блок (2 уровня) в c heckout» от C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd / connection_adapters / abstract / connection_pool.rb: 186: в loop' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_pool.rb:186:in блок в оформлении заказа ' из C: /Ruby/lib/ruby/1.9.1/monitor.rb: 201: в mon_synchronize' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_pool.rb:185:in оформить заказ ' от C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd / connection_adapters / abstract / connection_pool.rb: 93: in connection' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_pool.rb:316:in retrieve_connection ' от C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd / connection_adapters / abstract / connection_specification.rb: 97: в retrieve_conn ection' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_specification.rb:89:in connection ' от C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd / base.rb: 679: в columns' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/persistence.rb:284:in attribute_from_column_definition ' из C: /Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/locking/optimistic.rb: 62: в attributes_from_column_definition' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/base.rb:1394:in initialize ' из C: /WorkspaceGunjan/TrafficTracker/TrafficTracker/TestProject/RubyPrograms/RubyPrograms/AccessTrafficTracker.rb: 22: в new' from C:/WorkspaceGunjan/TrafficTracker/TrafficTracker/TestProject/RubyPrograms/RubyPrograms/AccessTrafficTracker.rb:22:in ' C: \ WorkspaceGunjan \ TrafficTracker \ TrafficTracker \ TestProject \ RubyPrograms \ RubyPrograms> C: \ WorkspaceGunjan \ TrafficTracker \ TrafficTracker \ TestProject \ RubyPrograms \ RubyPrograms> C: \ WorkspaceGunjan \ TrafficTracker \ TrafficTracker \ TestProject \ RubyPrograms \ RubyPrograms>

после анализа я обнаружил проблему с mysql.rb в \ Ruby \ lib \ ruby ​​\ 1.9.1 Метод создания проблемы:

<code>
def read()
      buf = []
      len = nil
      @sock.sync = false
      while len == nil or len == MAX_PACKET_LENGTH do
    a = @sock.read(4)
    len = a[0]+a[1]*256+a[2]*256*256
    pkt_nr = a[3]
    if @pkt_nr != pkt_nr then
      raise <strong>"Packets out of order: #{@pkt_nr}<>#{pkt_nr}"</strong>   #Exception raised at line number 1019
    end
    @pkt_nr = @pkt_nr + 1 & 0xff
    buf << @sock.read(len)
      end
      @sock.sync = true
      buf.join
    end

1 Ответ

0 голосов
/ 01 марта 2011

Наконец, после того, как я приложил все усилия к MySql и Postgresql, я смог установить успешное соединение с MySql.
Рабочий набор включает в себя:
Версия Ruby: 1.87
MySql версия: 5.5
Для работы с ActiveRecord необходимо установить адаптер. В командной строке напишите:
gem install mysql2.

Код для построения успешного соединения базы данных MySql с Ruby на уровне ActiveRecord:

<code>
require "rubygems"
require "active_record"
class Source < ActiveRecord::Base
    set_table_name "sources"
    ActiveRecord::Base.establish_connection(
        <strong>:adapter => "mysql2"</strong>,
        :host => "localhost",
        :username => "test",
        :password => "test",
        :port => 3306,
        :database => "TestDB",
        :socket => "mysql"
    )
end
source = Source.find(:first, :conditions => [ "source_id = ?", 2 ])
puts source.source_name

Примечание. Используется адаптер mysql2, а не mysql

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