使用apt-get将MySQL更新为5.5后,mysql2
gem停止工作。
这是错误:
Incorrect MySQL client library version!
This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
我尝试使用mysql_config重新安装,但它似乎没有什么区别..
gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config
相应地,我试着告诉bundle使用mysql-config编译mysql2但是仍然存在错误。
bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle install
当我尝试使用旧版本的gem(v0.2.6)时,rails控制台会打开,但在运行任何类型的查询后都会崩溃。
在尝试最新版本的mysql2 gem时,这是完整的错误堆栈:
[marco@linode:/www] 07:29:00 AM: rails c
/users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `require': Incorrect MySQL client library version! This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `<top (required)>'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
from /www/config/application.rb:7:in `<top (required)>'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `require'
from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
编辑:我从缓存中删除了所有mysql2 gemspecs,通过apt-get卸载了所有与mysql相关的软件包并重新安装了所有内容,然后再次尝试使用mysql-config标志安装gem。但这一切都证明是徒劳的。错误仍然存在。
编辑2 :正如John Bachir所建议的,我确认mysql_config包含MySQL版本5.5。
答案 0 :(得分:12)
晚会,但我刚刚做了
gem uninstall mysql2
gem install mysql2
宝石路径是
$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16
答案 1 :(得分:8)
使用Ubuntu Server 11.04和Percona Server时遇到同样的错误,我做的是:
将/usr/lib/libmysqlclient.so.16.0.0
替换为/usr/lib/libmysqlclient.so.18.0.0
答案 2 :(得分:7)
我有这个问题,只需要重新编译宝石。我不知道是否有更多的编程方式与bundler,但我只是删除已编译的gem然后重新运行bundler:
$ bundle show mysql2
/usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/mysql2-32dd7e5bbeba
$ rm -rf /usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/mysql2-32dd7e5bbeba
$ bundle
答案 3 :(得分:3)
我遇到了类似的问题:
MySQL客户端库版本不正确!这个gem是为5.6.12编译的,但客户端库是5.5.28。
我在Mac上的MySQL版本:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using EditLine wrapper
由bundle install
安装的mysql2 gem是mysql2-0.3.13
我通过在Gemfile中将mysql2 gem设置为旧版本来解决这个问题:
gem 'mysql2', '0.2.6'
如果'0.2.6'
不适合您,您可以尝试使用其他旧版本号。
答案 4 :(得分:1)
您可能还会检查系统的软件包列表,而不是移动库文件 - 如果您使用apt-get升级到5.5,那么您可能仍然拥有5.1库,而您根本不需要它们。例如,在我们遇到类似问题的系统上,我们仍然拥有5.1库:
$ sudo dpkg -l | grep mysql
ii libmysqlclient-dev 5.5.13-rel20.4-136.lucid Percona Server database development files
ii libmysqlclient16 5.1.61-rel13.2-431.lucid Percona Server database client library
ii libmysqlclient18 5.5.13-rel20.4-136.lucid Percona Server database client library
不是将5.5库复制到5.1库上,而应该能够删除它:
$ sudo apt-get remove libmysqlclient16
对我们来说,这比之前提出的库重命名解决方案更可靠。
答案 5 :(得分:1)
我再次遇到这个问题,我无法用我之前的方法解决它(使用旧版本的mysql2 gem)。所以我尝试了另一种方法:
1.找出你的gem库所依赖的mysql_config。
mysql_config的情况在不同人的机器上有所不同,而一个人的机器可以有几个mysql_config,所以没有标准的mysql_config路径供大家使用。 以此问题为例,mysql_config版本为“5.1.58”,因此您可以在root中搜索“mysql”文件,找到与“5.1.58”相关的文件:cd /
sudo find -name "mysql" ./
2.再次使用特定的mysql_config路径在步骤1中找到mysql2 gem库
gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>
答案 6 :(得分:1)
除了确保只安装了libmysqlclient18
库(而不是16)之外,让它适用于我的是安装libmysqlclient18-dev
(开发标题)。
这是Ubuntu Precise上的Percona Server 5.5。
答案 7 :(得分:1)
我尝试了上面的所有答案,我的最终方法相当简单 - 删除整个捆绑的gem堆栈并重新安装所有内容。最终解决了mysql客户端问题。即。
rm -rf /Users/sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
捆绑安装
答案 8 :(得分:1)
如果您了解c程序,则可以删除此消息。省略它。
打开此mysql.gem mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c
找到“这个宝石被编译为”,删除这个句子。
if (lib[i] != MYSQL_SERVER_VERSION[i]) { Line 1897: rb_raise(rb_eRuntimeError, "Incorrect MySQL client library version! This gem was compiled for %s but the client library is %s.", MYSQL_SERVER_VERSION, lib); }
你需要在windows系统上为本地gemfile安装设置sys-variable。 SET HOMEDRIVE = c: 错误:执行gem时...(Errno :: EINVAL)无效参数@ rb_file_s_stat - U:/
安装本地gem文件。 C:\ Rails&gt; gem install --local mysql-2.9.1.gem --install-dir = c:/ tmp --platform = ruby - --with-mysql-dir = C:/ Rails / mysql-connector -C mysql-connector-c访问mysql http://dev.mysql.com/downloads/connector/c/。你不关心版本。
再试一次。 要求'mysql'
答案 9 :(得分:1)
在使用Brew的Mac上,验证计算机上安装的版本:
ls /usr/local/Cellar/mysql*
他们删除了错误的版本,例如:
brew uninstall mysql-client
移除宝石:
gem uninstall mysql2
再次运行捆绑包:
bundle install
答案 10 :(得分:0)
确保/usr/bin/mysql_config
确实是5.5附带的那个。
答案 11 :(得分:0)
在我的情况下,我在/ usr / lib中留下了来自libmysqlclient15(日期为2009年)和libmysqlclient16(日期为20012)的各种文件,可能是来自Ubuntu的破坏升级。
删除libmysqlclient15文件(链接到libmysqlclient15.so)解决了我的问题。
答案 12 :(得分:0)
在我的机器上,我必须卸载gem,然后将符号链接/usr/local/mysql
重定向到正确的Homebrew版本:
ln -s /usr/local/bin/mysql /usr/local/mysql
然后运行bundle install
。
答案 13 :(得分:0)
重新安装libmysqlclient-dev并为我修复apt remove libmysqlclient-dev && apt install libmysqlclient-dev