错误通过Bundler安装mysql2 gem

我正在尝试通过Bundler安装mysql2 gem,但它一直死于以下错误:

 ** executing command /home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/installer.rb:483:in 'rescue in block in build_extensions': ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) /home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-mysql-config=/usr/bin/mysql_config checking for rb_thread_blocking_region()... yes checking for mysql.h... no checking for mysql/mysql.h... no ----- mysql.h is missing. please check your installation of mysql and try again. ----- *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby --with-mysql-config Gem files will remain installed for inspection. 

我通过谷歌searchfind的大部分内容都build议通过--with-mysql-config参数来修复它。 所以,基于:

 $ which mysql_config /usr/bin/mysql_config 

我将以下内容添加到Bundler的configuration中:

 $ bundle config build.mysql2 --with-mysql-config='/usr/bin/mysql_config' 

但是,仍然没有运气 – 与上面一样崩溃。

由于它正在死于错误mysql.h is missing ,我检查了,据说周围,只是不能被Bundlerfind。

 $ find / -name mysql.h /usr/include/mysql5/mysql/mysql.h 

有什么想法吗?

答案与Wrikken发布的类似 – 这是我为了未来的读者所做的修正。

(这是针对RHEL 5.5的 – 类似但不同的命令适用于Ubuntu / Debian /等)。

sudo yum list installed将会打印出你机器上所有已安装的软件包(注意:RHEL上的yum需要添加一个Red Hat Network存储库[我使用EPEL ],并通过sudo运行它)。

我有mysqlmysql-server ,这解释了为什么MySQL工作正常的每个预先存在的应用程序,但没有mysql-devel ,这是必要的修复mysql.h is missing错误和类似的其他生成错误。

长话短说,为了安全起见,在mysqldump -u root -ppassword --all-databases > full-dump.sql ,用一个简单的

 sudo yum install mysql-devel 

对于Ubuntu必须安装以下。 libmysqlclient-dev libmysqlclient16

对于具有mysql的brew安装的Mac,以下解决scheme解决了我的问题:

我编辑了/usr/local/Cellar/mysql/5.6.12/bin中的mysql_config文件,并删除了cflags和cxxflags的W编译器选项-Wno-null-conversion和-Wno-unused-private-field。

这解决了“gem install mysql2”的问题。

参考: http : //www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

上述问题将会发生,因为mysql-devel软件包没有正确安装在你的系统中。 我将在CentOS中解释如何解决这个问题。 当您尝试使用安装该程序包时,

  yum install mysql-devel 

如果安装MySql-Administrative工具和MySQL查询浏览器,会出现一些与现有软件包的冲突。

在这种情况下,您需要卸载所有现有的mysql2包并重新安装。

  rpm -qa -last | grep -i mysql yum remove MySQL-server-5.5.27-1.rhel5 yum remove MySQL-client-5.5.27-1.rhel5 yum remove mysql-gui-tools-5.0r12-1rhel4 yum remove mysql-query-browser-5.0r12-1rhel4-a 

所以,你可以像上面那样卸载任何与rpm -qa一起显示的mysql事物。

然后你可以安装mysql-server和mysql-client。

  yum install mysql-server yum install mysql-client 

现在你安装mysql-devel包。

  yum install mysql-devel 

现在没有包冲突,你可以安装mysql2的gem。

  gem install mysql2 -v '0.3.11' 

现在你的mysql2gem将成功安装,你很好去。

在我的情况下,这个问题是一个不正确的mysql_config脚本。 当使用–cflags选项的命令行调用时,它将返回一个包含以下内容的选项string:

  -Xclang -target-feature -Xclang -aes -Qunused-arguments 

由于某些原因,如果包含这些选项,extconf.rb脚本中对have_header('mysql.h')的调用将会失败。

什么工作对我来说是手工编辑mysql_config文件删除行的这些选项的引用:

  cflags =“ -  I $ pkgincludedir -Os -w -pipe -march = native -Xclang -target-feature -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF”#note:end space! 

我重写为:

  cflags =“ -  I $ pkgincludedir -Os -w -pipe -march = native -O2 -g -DDBUG_OFF”#note:end space! 

我得到了同样的错误。 和Ubuntu 16.我不得不写下面的命令:

 sudo apt-get install libmysqlclient-dev 

它回来了。

我知道这是古老的,但如果任何人仍然得到这个zlib错误,确保你键入:rvm使用

(无论你使用的是什么版本)

我可以发誓我做到了。 只是张贴,以防万一有人拉出他们的头发,这有助于。 如果不好运气。 🙂

我遇到了这个问题,而在Fedora 23捆绑安装redmine。我发现的解决scheme是发出这个命令 – sudo dnf install redhat-rpm-config

这不仅解决了我安装mysql2的问题,也解决了nokogiri和redcarpet的问题。