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

我在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。

我真的在我的智慧结束,所以任何帮助将不胜感激!

大卫

当您尝试使用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中的已知错误

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

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

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

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

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

只是为了解决这个问题,ruby-mysql 2.9.4在ubuntu 10.04上运行得非常好,但在macos中却没有 – 雪豹。

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