通过Bundler安装mysql2 gem时出现错误

62

我正在尝试通过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.

我在 Google 上搜索了许多内容,大多数建议通过传递 --with-mysql-config 参数来解决这个问题。 因此,基于以下内容:

$ which mysql_config
/usr/bin/mysql_config

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

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

然而,仍然没有运气 - 与上面相同的崩溃。

由于它以错误mysql.h is missing死亡,因此我检查了一下,它据说在附近,只是Bundler无法找到它。

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

有什么想法吗?


2
你试过在https://dev59.com/L3A65IYBdhLWcg3w1SVC 上面尝试那个解决方案了吗? - Wrikken
否则,您可以编辑ext/mysql2/extconf.rb并手动输入正确的mysql目录路径(它在顶部附近)。 - Wrikken
9个回答

95

我的回答类似于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

9
在 Mac 上,执行 brew install mysql 命令安装 MySQL。这是为了在 Rails 3 中安装 mysql2 gem 所必需的步骤。 - Peter Ehrlich
在我的安装中,已经安装了 mysql-devel,但是 /usr/include/mysql 是空的。mysql.h 实际上位于 /usr/include/mysql51 中。因此,我运行了 sudo rmdir /usr/include/mysql ; sudo ln -s /usr/include/mysql51 /usr/include/mysql,然后就大功告成了!现在 Mysql2 可以正常构建了。 - Zee
*** extconf.rb 失败 ***(适用于 Fedora) - User

33

安装 Ubuntu 需要以下两个库。 libmysqlclient-dev libmysqlclient16


当我在Ubuntu 16.04上尝试时,没有libmysqlclient16,只有libmysqlclient20。我怀疑无论您使用哪个版本的Ubuntu,类似于sudo apt-get install 'libmysqlclient*'的操作都将安装所需的两个软件包,只要更新的版本不会出现问题。 - mwfearnley

20

9

以上问题的发生是因为 mysql-devel 包在您的系统中没有正确安装。我将解释在 Centos 中如何修复此问题。当您尝试使用以下命令安装该软件包时:

    yum install mysql-devel

如果安装了MySQL管理工具和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'

现在您的mysql2 gem已经成功安装,可以开始使用了。


非常感谢。这是唯一有效的解决方案。 - Taher A. Ghaleb

3

我也遇到了同样的错误。对于Ubuntu 16,我需要执行以下命令:

sudo apt-get install libmysqlclient-dev 

并且它可以正常工作。


1
在我的情况下,问题是mysql_config脚本的行为不当。当使用--cflags选项从命令行调用时,它会返回一个包含以下选项的字符串:
-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!

0

我知道这已经很古老了,但如果有人仍然遇到这个 zlib 错误,请确保您输入了以下内容:

rvm use

(您正在使用的版本)

我曾经发誓过我做过了。只是为了帮助那些苦苦搜索答案的人们,我才发布这篇文章。如果没有用,祝好运。 :)


0

我在 Fedora 23 上进行 Redmine 的 bundle 安装时遇到了这个问题。我找到的解决方法是执行以下命令 - sudo dnf install redhat-rpm-config

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


0
在我的 Ubuntu 16.04.4 LTS 上运行的 mysql Ver 15.1 Distrib 10.0.34-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2 上,以下操作是有效的:

sudo apt-get install libmariadb-client-lgpl-dev

我看到当前安装程序的错误消息建议运行

apt-get install libmysqlclient-dev

这也可能起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接