错误通过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
运行它)。
我有mysql
和mysql-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的问题。