[英]Mysql adapter ActiveRecord in Ruby throwing: 'Packets out of order'
Ruby版本:1.9.1 Mysql版本:5.0
编写的代码为:
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)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:inread': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:inread': Packets out of order: 0<> (RuntimeError)
from C:/Ruby/lib/ruby/1.9.1/mysql.rb:444:inreal_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:ininitialize' 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:incheckout_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
从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'fromloop' 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:inconnection' 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_specificatiretrieve_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:62attributes_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>
经过更多分析后,我发现\\ 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
最后,在尽我所有的MySql和Postgresql努力之后,我能够与MySql成功建立连接。
工作集涉及:
Ruby版本:1.87
MySql版本:5.5
要使用ActiveRecord,需要安装适配器。 在命令提示符下,输入:
gem安装mysql2。
用于在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
注意:使用的适配器是mysql2而不是mysql
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.