Ruby mysql2 gem编译为错误的mysql客户端库版本
使用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 `' 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 `' 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 `' from script/rails:6:in `require' from script/rails:6:in `'
编辑 :我从缓存中删除了所有mysql2 gemspecs,通过apt-get卸载了所有与mysql相关的软件包并重新安装了所有内容,然后再次尝试使用mysql-config标志安装gem ..但这一切都certificate是徒劳的。 错误仍然存在。
编辑2 :正如John Bachir所建议的那样,我确认mysql_config包含MySQL 5.5版。
使用Ubuntu Server 11.04和Percona Server时遇到同样的错误,我做的是:
用/usr/lib/libmysqlclient.so.16.0.0
替换/usr/lib/libmysqlclient.so.18.0.0
晚了,但我刚刚做了
gem uninstall mysql2 gem install mysql2
gem路径是
$ bundle show mysql2 /var/lib/gems/1.9.1/gems/mysql2-0.3.16
我有这个问题,只需要重新编译gem。 我不知道是否有更多的编程方式与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
我遇到了类似的问题:
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'
不适合您,您可以尝试其他旧版本号。
您可能还会检查系统的软件包列表,而不是移动库文件 – 如果您使用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.1库复制5.5库,您应该能够删除它:
$ sudo apt-get remove libmysqlclient16
对我们来说,这比之前提出的库重命名解决方案更可靠。
我再次遇到这个问题,我无法用我之前的方法解决它(使用旧版本的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%>
除了确保只安装了libmysqlclient18
库(而不是16)之外,使其适用的是安装libmysqlclient18-dev
(开发头文件)。
这是在Ubuntu Precise上的Percona Server 5.5。
我尝试了上面的所有答案,我的最终方法相当简单 – 删除整个捆绑的gem堆栈并重新安装所有内容。 最终解决了mysql客户端问题。 即
rm -rf /Users/sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
捆绑安装
如果你知道c程序,你可以删除此消息。 省略它。
-
打开这个mysql.gem
mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c
-
找到“这个gem编译为”,如果句子删除这个。
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> 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’
确保/usr/bin/mysql_config
确实是5.5附带的那个。
在我的例子中,我有来自libmysqlclient15(日期为2009年)和libmysqlclient16(日期为20012)的各种文件,这些文件留在/ usr / lib中,可能来自拙劣的Ubuntu升级。
删除libmysqlclient15文件(链接到libmysqlclient15.so)解决了我的问题。
在我的机器上我必须卸载gem,然后将symlink /usr/local/mysql
到正确的Homebrew版本:
ln -s /usr/local/bin/mysql /usr/local/mysql
然后运行bundle install
。
重新安装libmysqlclient-dev和apt remove libmysqlclient-dev && apt install libmysqlclient-dev
为我修复