安装mysql2时出错:无法构建gem原生扩展

时间:2010-08-31 10:54:58

标签: mysql ruby-on-rails ruby rubygems mysql2

我在尝试为Rails安装mysql2 gem时遇到了一些问题。当我尝试通过运行bundle installgem install mysql2来安装它时,它会给我以下错误:

  

安装mysql2时出错:错误:无法构建gem原生扩展。

如何解决此问题并成功安装mysql2

29 个答案:

答案 0 :(得分:885)

在使用aptitude的Ubuntu / Debian和其他发行版上:

sudo apt-get install libmysql-ruby libmysqlclient-dev

套餐libmysql-ruby已被淘汰,由ruby-mysql取代。 This是我找到解决方案的地方。

如果上述命令无效,因为找不到libmysql-ruby,则以下内容就足够了:

sudo apt-get install libmysqlclient-dev

在Red Hat / CentOS和其他使用yum的发行版上:

sudo yum install mysql-devel

在Mac OS X上使用Homebrew

brew install mysql

答案 1 :(得分:58)

我在Mac上并使用homebrew来安装开源程序。我确实需要安装mac Dev工具才能安装自制软件,但之后这很简单:

brew install mysql

安装mysql。我从没有过mysql gem问题。

答案 2 :(得分:34)

这是 Windows用户的解决方案,希望有所帮助!

在Windows上使用MySQL和Rails 3

  • 安装railsinstaller - > www.railsinstaller.org (我将其安装到c:\ Rails)

  • 安装MySQL (我使用MySQL 5.5) - > dev.mysql.com/downloads/installer /

  

---用于mySQL安装---   

如果你还没有安装这两个文件,你可能需要它们才能让你的MySQL成为常年

  vcredist_x86.exe - > http://www.microsoft.com/download/en/details.aspx?id=5555   dotNetFx40_Full_x86_x64.exe - > http://www.microsoft.com/download/en/details.aspx?id=17718   

  使用默认安装   开发者机器

     

-MySQL Server配置 -
  港口:3306
  windows服务名称:MySQL55
  mysql root pass:root(以后你可以改一下)
  (用户名:root)
   -MySQL Server配置 -

     

---用于mySQL安装---


  

---安装mysql2 Gem ---

  重要提示:使用Git Bash命令行执行此操作(这是使用railsinstaller安装的) - >开始/ Git Bash

   gem install mysql2 - ' - with-mysql-lib =“c:\ Program Files \ MySQL \ MySQL Server 5.5 \ lib”--with-mysql-include =“c:\ Program Files \ MySQL \ MySQL Server 5.5 \ include“'   

  现在gem应该已正确安装   

  最后从
复制libmysql.dll文件   C:\ Program Files \ MySQL \ MySQL Server 5.5 \ lib
  到
  C:\ Rails的\ Ruby1.9.2 \ BIN

   ---安装mysql2 Gem ---


如果你不确定如何创建一个带有MySQL的Rails 3应用程序,你现在可以使用你的Rails应用程序了......


---使用MySQL获取Rails 3应用程序---

打开命令提示符(不是Git Bash) - >启动/ CMD
导航到您的文件夹(c:\ Sites)
创建新的rails应用程序

rails new world

删除文件c:\ Sites \ world \ public \ index.html
编辑文件c:\ Sites \ world \ config \ routes.rb
添加此行 - > root:to => '城市#索引'

打开命令提示符(生成视图和控制器)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer



编辑文件c:\ Sites \ world \ app \ models \ city.rb看起来像这样

class City < ActiveRecord::Base
 set_table_name "city"
end

编辑文件c:\ Sites \ world \ config \ database.yml,使其如下所示

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

添加到gemfile

gem 'mysql2'

打开命令提示符 windows cmd,而不是Git Bash(运行你的应用!) 导航到您的应用程序文件夹(c:\ Sites \ world)

rails s

在此处打开您的浏览器 - &gt; http://localhost:3000

---使用MySQL获取Rails 3应用程序---

答案 3 :(得分:20)

我有几台计算机,32位和64位处理器,它们运行在Ubuntu Linux,Maverick(10.10)版本上。

我遇到了同样的问题,对我来说,问题 的 sudo apt-get install libmysql-ruby libmysqlclient-dev 做了这个工作!!!

答案 4 :(得分:15)

MacOS用户的另一种方式

如果您使用“brew”来安装mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

x.x.x =您要安装的mysql2 gem的版本
y.y.y =您已安装ls /usr/local/Cellar/mysql的mysql版本,以便找到它。

答案 5 :(得分:10)

对于 MacOS Mojave

df.astype({'col1': 'int32'}).dtypes

答案 6 :(得分:7)

您是否尝试过使用

 gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib 

指定base目录的位置以及完成gem安装所需的MySQL库路径?

来源: MySQL Gem Install ERROR: Failed to build gem native extension MySQL Forums :: Ruby :: Help needed with installing MySQL binding for Ruby

答案 7 :(得分:7)

在Ubuntu(18.04)

我能够通过运行以下命令来解决此问题:

sudo apt-get install build-essential libmysqlclient-dev
gem install mysql2

reference

答案 8 :(得分:7)

如果您正在使用yum,请尝试:

sudo yum install mysql-devel

答案 9 :(得分:5)

这在Windows中解决了我的问题:

subst X: "C:\Program files\MySQL\MySQL Server 5.5" 
gem install mysql2 -v 0.x.x --platform=ruby -- --with-mysql-dir=X: --with-mysql-lib=X:\lib\opt 
subst X: /D

答案 10 :(得分:5)

如果您仍然遇到问题......

尝试安装

   sudo apt-get install ruby1.9.1-dev

答案 11 :(得分:4)

我在Windows 7上遇到过这个问题。这显然是一个不兼容的问题,解决方案如下:

从较旧的InstantRails安装程序下载libmySQL.dll文件。它可以从InstantRails GitHub repo获得。

接下来,将该文件复制到您的Ruby / bin文件夹中。

现在,你很高兴;)

答案 12 :(得分:3)

我也遇到了这个错误。通过安装开发包解决。我正在使用拱门,它是:

sudo pacman -S base-devel

安装了:

m4, autoconf, automake, bison, fakeroot, flex, libmpc, ppl, cloog-ppl, elfutils, gcc,
libtool, make, patch, pkg-config

但我认为它实际上需要make和gcc。错误输出说(在我的机器上,除其他外):

“您必须先安装开发工具。”

所以这是一个明显的决定,它有所帮助。

答案 13 :(得分:3)

在Debian Stretch上,对我有用的软件包是 default-libmysqlclient-dev

sudo apt-get update && apt-get install -y default-libmysqlclient-dev

答案 14 :(得分:3)

您必须安装一些依赖项

sudo apt-get install libmysql-ruby libmysqlclient-dev

答案 15 :(得分:2)

我在我的mac上遇到了这个错误,发现我需要从mysql 32bit升级到mysql 64位才能让这个错误消失。我使用ruby 1.9.2和rails3.0.0

在intel macbook pro上运行OSX 10.6

我还需要安装xcode才能获得编译gem所需的unix实用程序,如“make”。

一旦完成,我就可以运行gem install mysql和gem install mysql2而不会出错。

答案 16 :(得分:1)

解决方案仅适用于Mac OS X

如果你用自制软件安装MySQL,对我有用的是卸载MySQL,并通过MySQL网站(https://www.mysql.com/)安装MySQL Community Edition。

安装完成后,只需重新输入命令gem install mysql2或必要时sudo gem install mysql2,如果您收到权限被拒绝的问题。

答案 17 :(得分:1)

对于Windows用户: 你设置你的mysql的lib和include路径,例如,如果你使用xampp就可以这样:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'

答案 18 :(得分:0)

在我看来,这有所帮助:

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

然后:

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

结果:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

See this post

答案 19 :(得分:0)

libmysql-ruby已被淘汰并被替换。新命令:

 sudo apt-get install ruby-mysql libmysqlclient-dev

答案 20 :(得分:0)

我可以看到大多数人都找到了这个问题的解决方案,这主要是因为但不限于缺少软件包,这是在我清除 mysql 并重新安装它后发生的。我必须运行此命令才能解决我的问题:

sudo apt-get install libmysqlclient-dev

这个命令帮助我解决了我的问题

答案 21 :(得分:0)

对于那些使用Windows 7和64位MySQL的人

如果你想使用64位MySQL,你应该按照herehere)的说明进行操作。

答案 22 :(得分:0)

我只是想为 Mac用户添加此答案。

我的服务器运行得非常好,直到我更新了我的xcode。启动我的rails服务器时,错误显示如下

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb --with-mysql-
    checking for rb_thread_blocking_region()... /Users/user/.rvm/rubies/ruby-1.9.3-  
    p448/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an    
    executable file. (RuntimeError)

有人建议在错误消息的末尾安装mysql2 gem。因此,当我尝试安装它时,我得到了上述问题中提到的错误。我得到的错误如下

ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.

所以在这篇文章中建议我尝试'brew install mysql',并且说已经安装了mysql版本。但是在它说之前有警告

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license

然后我尝试了这个sudo xcodebuild -license并在最后键入“同意”。你必须是root才能同意许可。

在此之后,我再次尝试捆绑安装,然后一切正常。 [即使由于这个xcode更新,我的塔也有问题。]

答案 23 :(得分:0)

您遇到此问题是因为您尚未安装MySql。在安装mysql2 gem之前。安装MySQL。之后,mysql2 gem将安装。

答案 24 :(得分:0)

得到“你必须先安装开发工具。”尝试在升级到Mac OS X Mountain Lion后安装mysql2 gem 时出错。显然,执行此升级会删除命令行编译器。

修复:

  • 我卸载了我的旧版Xcode(运行/ Developer / Library中的卸载脚本)。然后删除/ Developer目录。
  • 去了AppStore并下载了Xcode。
  • 推出Xcode并进入首选项 - &gt;下载并安装命令行工具。

答案 25 :(得分:0)

下载正确版本的mysqllib.dll然后将其复制到ruby bin真的适合我。请点击此链接[{3}}

答案 26 :(得分:0)

更正了mysql-dev问题之后,您可能需要删除错误的mysql2安装。 $ bundle install之后仔细查看消息。你可能需要

rm -rf vendor/cache/
rm -rf ./Zentest

这将清除错误的mysql2安装,以便最终的$ bundle安装可以创建一个好的。

答案 27 :(得分:0)

如果仍然出现错误,请按照Rails 3上的mysql2 gem安装步骤进行操作 -

http://rorguide.blogspot.com/2011/03/installing-mysql2-gem-on-ruby-192-and.html

大多数用户都可以安装mysql2 gem。

答案 28 :(得分:0)

我获得了在Mac OS X 10.6.6上构建的gem 1)确保已安装Developer工具包 2)从Source下载当前的MySQL包(在我的例子中是5.5.8) 3)从cmake.org安装cmake工具 4)按照mysql分发文件中INSTALL-SOURCE的2.11节中的说明进行操作 5)sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include gem已成功构建,但rdoc和ri抱怨的文档中有两个错误。 但是现在当我尝试要求'mysql2'时,我得到了一个

LoadError: no such file to load -- mysql2/mysql2

我希望我得到的错误是找不到libmysqlclient.16.dylib,因为我们在另一篇文章中找到了它(搜索install_name_tool)。

我的$ PATH中有/ usr / local / mysql(这是我的源文件和构建文件所在的位置),所以我有点难过。如果有人有任何想法,我会在睡了几个小时后再回来看看。