令人困惑的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。