令人困惑的Ruby / MySQL错误:“无效数据包:序列号不匹配”

时间:2011-01-20 14:07:32

标签: mysql ruby-on-rails ruby

我在Heroku上运行带有MySQL的Rails应用程序,这个错误让我感到非常困惑。如果我尝试选择单行,一切正常,如果我尝试选择少数几行。但是如果我尝试选择*,甚至几十/百条记录,我会收到以下错误:

ActiveRecord::StatementInvalid: Mysql::ProtocolError: invalid packet: sequence number mismatch(52 != 29(expected)): SELECT  `people`.* FROM `people` LIMIT 30 OFFSET 10
/home/slugs/70bb5dad-9387-46c4-935d-cf74e70276a8/mnt/.bundle/gems/ruby/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract_adapter.rb:202:in `log'
/home/slugs/70bb5dad-9387-46c4-935d-cf74e70276a8/mnt/.bundle/gems/ruby/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:289:in `execute'
/home/slugs/70bb5dad-9387-46c4-935d-cf74e70276a8/mnt/.bundle/gems/ruby/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/mysql_adapter.rb:619:in `select'
/home/slugs/70bb5dad-9387-46c4-935d-cf74e70276a8/mnt/.bundle/gems/ruby/1.8/gems/activerecord-3.0.3/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all'

运行Rails 3,Ruby 1.8.6和MySQL 5.1.42。

我真的在这里结束了,所以任何帮助都会非常感激!

大卫

4 个答案:

答案 0 :(得分:11)

当您尝试使用all运行will_paginate时,类似于ruby-mysql连接器中的错误,例如@ author.books.all.paginate(...)

https://github.com/tmtm/ruby-mysql/issues#issue/8

快速解决方法是回到gem ruby​​-mysql 2.9.3

检查您正在运行的任何mysql连接器gem中的已知错误

答案 1 :(得分:0)

这就是我的设置工作(在Ubuntu中):

sudo apt-get install mysql-server-5.1 mysql-client-5.1 libmysqlclient-dev
sudo gem install mysql

确保您使用的是mysql gem而不是其他东西(如ruby-mysql)。

答案 2 :(得分:0)

在我的情况下,降级到ruby-mysql 2.9.3并没有完全解决它。

我还必须更新此文件: https://github.com/tmtm/ruby-mysql/commit/07ddfafafbd1d46bbb71c7cb54ae0f03bc998d27

只是为了解决这个问题, ruby-mysql 2.9.4在ubuntu 10.04上运行得非常好,但不适用于macos - snow leopard。

答案 3 :(得分:0)

我在rails3应用程序中遇到了这个问题,解决它的问题是将ruby从版本2.0.0降级到版本1.9.3。