简体   繁体   English

Ruby中的Mysql适配器ActiveRecord抛出:“数据包乱序”

[英]Mysql adapter ActiveRecord in Ruby throwing: 'Packets out of order'

Ruby version: 1.9.1 Mysql version: 5.0 Ruby版本:1.9.1 Mysql版本:5.0

code written was: 编写的代码为:


    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

Above code prints till 3 and breaks at Source.find(1) with error: 上面的代码打印到3,并在Source.find(1)处中断并出现错误:

1 2 3 C:/Ruby/lib/ruby/1.9.1/mysql.rb:1019:in read': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:in
1 2 3 C:/Ruby/lib/ruby/1.9.1/mysql.rb:1019: read': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:in
read': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:in
read': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:in
read' from C:/Ruby/lib/ruby/1.9.1/mysql.rb:110:in 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' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:164:in 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' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:36:in 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' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in 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
read': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:in
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读取为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'from C:/Ruby/lib/ruby/gems/1.9.1 /gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:164:in 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从C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:36:in中的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' 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来自C:/ Ruby / lib的new_connection /ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in 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
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 block (2 levels) in c heckout' 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 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 block in checkout' from C:/Ruby/lib/ruby/1.9.1/monitor.rb:201:in 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 checkout' from 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' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_specificati 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从C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_rerd /connection_adapters/abstract/connection_pool.rb:186:in loop'from 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中的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 checkout'from 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 restore_connection'from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd / connection_adapters / abstract / connection_specificati on.rb:97:in 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' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/base.rb:679:in columns' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/persistence.rb:284:in attributes_from_column_definition' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/locking/optimistic.rb:62:in 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' from C:/WorkspaceGunjan/TrafficTracker/TrafficTracker/TestProject/RubyPrograms/RubyPrograms/AccessTrafficTracker.rb:22:in new' from C:/WorkspaceGunjan/TrafficTracker/TrafficTracker/TestProject/RubyPrograms/RubyPrograms/AccessTrafficTracker.rb:22:in ' C:\\WorkspaceGunjan\\TrafficTracker\\TrafficTracker\\TestProject\\RubyPrograms\\RubyPrograms> C:\\ 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从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来自C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3的attributes_from_column_definition中/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 '从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> WorkspaceGunjan \\ TrafficTracker \\ TrafficTracker \\ TestProject \\ RubyPrograms \\ RubyPrograms> C:\\ WorkspaceGunjan \\ TrafficTracker \\ TrafficTracker \\ TestProject \\ RubyPrograms \\ RubyPrograms>

after analyzing more, i found problem with mysql.rb in \\Ruby\\lib\\ruby\\1.9.1 Method creating problem is: 经过更多分析后,我发现\\ Ruby \\ lib \\ ruby​​ \\ 1.9.1中的mysql.rb存在问题。创建方法的问题是:


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 "Packets out of order: #{@pkt_nr}<>#{pkt_nr}"   #Exception raised at line number 1019
    end
    @pkt_nr = @pkt_nr + 1 & 0xff
    buf << @sock.read(len)
      end
      @sock.sync = true
      buf.join
    end

Finally, after putting all my efforts with MySql and Postgresql, I am able to make successful connection with MySql. 最后,在尽我所有的MySql和Postgresql努力之后,我能够与MySql成功建立连接。
Working set involves: 工作集涉及:
Ruby Version: 1.87 Ruby版本:1.87
MySql Version: 5.5 MySql版本:5.5
To work with ActiveRecord, one need to have the adapter installed. 要使用ActiveRecord,需要安装适配器。 On command prompt, write: 在命令提示符下,输入:
gem install mysql2. gem安装mysql2。

Code to build successful connection of MySql database with Ruby under the layer of ActiveRecord: 用于在ActiveRecord层下建立MySql数据库与Ruby成功连接的代码:


require "rubygems"
require "active_record"
class Source < ActiveRecord::Base
    set_table_name "sources"
    ActiveRecord::Base.establish_connection(
        :adapter => "mysql2",
        :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

Note: Adapter used is mysql2 and not mysql 注意:使用的适配器是mysql2而不是mysql

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM