首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby抛出中的Mysql适配器ActiveRecord:“数据包无序”

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

Stack Overflow用户
提问于 2011-02-03 16:27:52
回答 1查看 1.7K关注 0票数 1

Ruby版本: 1.9.1 Mysql版本: 5.0

所写的代码是:

代码语言:javascript
复制
    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:in read': Packets out of order: 0<> (RuntimeError)

从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:inconnect‘from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3 initialize' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:36:innew’开始from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:inC:/ .0.3/lib/active_record/connection_adapters/mysql_adapter.rb:36:in /lib/ruby/gems/1.9.1/gems中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块的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:innew_connection (2级)/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块从C:/ruby/lib/ruby/1.9.1/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签出: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签出‘从C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_pool来自C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/connection_adapters/abstract/connection_specification.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:inconnection的.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:inretrieve_connection来自C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_reco rd/base.rb:679:incolumns' from C:/Ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.3/lib/active_record/persistence.rb:284:inattributes_from_column_definition‘从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初始化“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:\WorkspaceGunjan\TrafficTracker\TrafficTracker\TestProject\RubyPrograms\RubyPrograms> C:\WorkspaceGunjan\TrafficTracker\TrafficTracker\TestProject\RubyPrograms\RubyPrograms>

在详细分析之后,我发现\Ruby\lib\ruby\1.9.1中的mysql.rb存在问题,创建问题的方法是:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2011-02-28 23:43:02

最后,在使用MySql和Postgresql进行了所有的努力之后,我能够成功地与MySql连接。

成套工作包括:

Ruby版本: 1.87

MySql版本: 5.5

要使用ActiveRecord,需要安装适配器。在命令提示符下,写:

gem安装mysql2。

在MySql层下构建成功连接ActiveRecord数据库的代码:

代码语言:javascript
复制
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

注意:使用的适配器是mysql2,而不是mysql。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4888740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档