【问题标题】:Rails and mysql2 gem malformed packetRails 和 mysql2 gem 格式错误的数据包
【发布时间】:2017-05-05 11:18:17
【问题描述】:

我的宝石文件:

source 'https://rubygems.org'
gem 'rails', '4.2.8'
gem 'bootstrap-sass', '~> 3.3.7'
gem 'font-awesome-rails'
gem 'sqlite3'
gem 'mysql2'
gem 'sass-rails', '~> 5.0.4'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
group :doc do
  gem 'sdoc', require: false
end

我的数据库配置:

default: &default
  adapter: mysql2
  pool: 25
  timeout: 5000
  encoding: utf8

development:
  <<: *default
  host: 127.0.0.1
  database: asteriskcdrdb
  username: root
  password: pwd3lfga
  port: 13306

在控制台中,我在启动控制台并尝试从 db 中的表中读取后出现此错误:

Mysql2::Error: Malformed packet
    from /Users/michele/.rvm/gems/ruby-2.2.2/gems/mysql2-0.4.6/lib/mysql2/client.rb:89:in `connect'
    from /Users/michele/.rvm/gems/ruby-2.2.2/gems/mysql2-0.4.6/lib/mysql2/client.rb:89:in `initialize'
    from /Users/michele/.rvm/gems/ruby-2.2.2/gems/activerecord-4.2.8/lib/active_record/connection_adapters/mysql2_adapter.rb:18:in `new'

【问题讨论】:

  • 您是否尝试过此解决方案 [1]?添加 :local_infile => true 作为选项。 [1]stackoverflow.com/questions/8790874/…
  • @tingel2k 把那个选项放在哪里?在 database.yml 中?
  • 通过控制台尝试了这个命令:a = Mysql2::Client.new(:username=>'root', :host=>'127.0.0.1', :password=>'pwd3lfga', :database=>'asteriskcdrdb', :local_infile => true, :port=>13306) Rails 控制台输出:Mysql2::Error: Malformed packet
  • 只是一个奇怪的问题:你的mysql端口真的是13306吗?
  • @tingel2k 不要查看端口或主机名,这都是正确的;)

标签: ruby-on-rails mysql2


【解决方案1】:

原来这可以通过重新安装 mysql2 gem 来解决。我想我已经安装了从源代码编译的 MySQL 版本,然后切换到通过 brew 安装的 MySQL,这导致 gem 使用的客户端代码不兼容。这就解释了为什么它可以在命令行客户端运行,但在使用 gem 时却不行。

gem uninstall mysql2
gem install mysql2

Gemfile 中删除gem 'sqlite3'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2011-08-12
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多