在Windows 7上安装Ruby MYSQL2 gem

35

我正在尝试在Windows 7上安装mysql2 gem,我从mysql网站下载了连接器并将libmysql.dll放置在ruby200\bin目录下

然后执行gem install mysql2命令

这是结果,我是否做错了什么?

Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

    C:/Ruby200/bin/ruby.exe extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
*** 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=C:/Ruby200/bin/ruby
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/
extconf.rb:37:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError
)


Gem files will remain installed in C:/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.
3.13 for inspection.
Results logged to C:/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.3.13/ext/mysql2/g
em_make.out

如提示所示,请查看:结果记录到C:/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.3.13/ext/mysql2/gem_make.out以及mkmf.log以获取详细错误信息。请在此处发布它们。可能需要提供头文件,例如通过提供“gem install mysql2 -- --with-MySQL-lib=<MySQL源文件,与正确的mod级别匹配>”来安装。这些文件可以下载以允许安装,但请确保它与您的gem的mod级别匹配。我在Windows 8上使用BitNami Rubystack,其中包括MySQL。RailsInstaller是一个非常受欢迎的综合安装程序。 - Richard_G
可能是本地 gem 安装的问题。您能否安装其他本地 gem,例如 bson_ext? - crazybob
谢谢大家的帮助,@R_G,是的,你说得对,我需要通过下面的gem命令指定每个所需文件的位置。为什么gem install不在同一个文件夹中查找,我也不确定。我试图避免使用捆绑安装程序,因为这有助于我更好地理解Rails! - Mrk Fldig
可能是重复的问题:无法在Windows 7上安装mysql2 gem - André Herculano
阅读我问题顶部的黄色文本。 这就是mysql gem和mysql2 gem无法安装的原因! http://stackoverflow.com/questions/30361280/mysql-ruby-gem-not-installing-on-windows-7 - Entree
感谢MacGyver,根据黄色部分的提示,这个问题确实有答案,就是那个获得了85个赞的答案...;-) - Mrk Fldig
18个回答

108

编辑于 2014年9月30日

当这个回答发布时,64位的Rails安装程序不是推荐的版本——现在似乎越来越多的人开始使用它了。需要注意的是,当您下载MySQL连接器时,需要下载与您安装的rails版本相对应的64位或32位。

令人惊讶的是,在今天早上我碰巧找到了一个非常早期的答案,因为我碰巧正在寻找类似性质的其他内容。我不太确定为什么没有一个单一的简单指南,因为它似乎非常直接!

由于某种原因,当您安装gem时只指定mysql-dir不能够捕获其他子目录,因此您需要手动设置参数。

对于任何遇到同样问题的人,我做了以下事情:

1)从此处下载MySQL C连接器:http://dev.mysql.com/downloads/connector/c/

注意,不要下载安装程序,而要下载您的操作系统对应的归档文件

下载与您安装的rails版本相对应的32位或64位的归档文件。

2)将文件提取到C:\ mysql-connector

3)然后运行:

 gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\mysql-connector\lib" --with-mysql-include="C:\mysql-connector\include" --with-mysql-dir="C:\mysql-connector"'

看起来一切都正常。

编辑于 2014年1月30日

我刚刚在一台砖头机上进行了全新安装,第三步的命令没有生效,但下面这个命令可以:

gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:\mysql-connector"'

我不太确定区别在哪里,但这一次它似乎成功获取了目录,所以如果第一个不起作用,请尝试这个!

我认为这与安装Rails的方式有关,在这一次中,我使用了RailsInstaller,它似乎正确设置了路径。

很多结果似乎取决于你使用的shell,很多人在使用powershell时遇到问题,所以我建议不要使用它。我是在升级的命令提示符中完成的。

最后,如果你在执行RAILS S时遇到关于mysql2 gem的错误,你需要从mysql连接器的LIB目录中复制libmysql.dll到rails安装的bin目录中。


谢谢,老兄!你帮我省了很多时间! - Guy P
7
请确保您下载了32位的服务器和32位的连接器。https://github.com/oneclick/rubyinstaller/wiki/Troubleshooting#wiki-gems_mix_bits - Duke
第二段代码使用了32位版本的mysql-connector并成功运行。 - user1922137
我的回答涵盖了如果您将它们作为Windows MySQL安装程序的一部分安装的情况。 - glenatron
只有在我禁用了杀毒软件之后,它才为我正常工作。我不知道为什么。我在 https://teamtreehouse.com/forum/resolved-mysql-error-gem-install-with-rails 的 David Eichel 的评论中找到了这个提示。 - AntonioJunior
显示剩余6条评论

7

我尝试了@Mrk Fldig的解决方案,但并没有起作用...

  1. 下载了适用于Windows 7 32位的最新MySQL 安装程序
  2. 使用以下命令安装Gem:gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:/Program Files/MySQL/MySQL Connector C 6.1 6.1.2/"'

需要注意的一个陷阱是,我将反斜杠(\)更改为正斜杠(/)。我尝试了同样的操作,但使用反斜杠不起作用。

安装程序已经包含了MySQL的C连接器,存储在 MySQL Connector C 6.1 6.1.2 目录中。因此,只传递 --with-mysql-dir 参数而无需传递 --with-mysql-lib--with-mysql-include 参数,使Gem在同一目录中搜索 libinclude 目录。


1
这对我也有用。但是我只是按照上面的说明使用了存档。问题似乎在于你使用的shell。我正在msysgit bash shell中运行,多个--with选项似乎会失败。你的技巧完全有效。 - Alexander Kellett
1
我在CMD上也可以正常工作。谢谢! - taiar

5
Ruby 2.1.3、Windows 8.1和MySQL Server 5.7的步骤。所有都是x64位。
  1. 下载开发工具包
  2. 解压开发工具包。
  3. 运行CMD并进入开发工具包所在目录
  4. 运行ruby dk.rb init
  5. 运行ruby dk.rb install
  6. 运行gem install mysql2 -- '--with-mysql-lib="c:\Program Files\MySQL\MySQL Server 5.7\lib" --with-mysql-include="c:\Program Files\MySQL\MySQL Server 5.7\include" --with-mysql-dir="c:\Program Files\MySQL\MySQL Server 5.7"'

这个解决方案在我的 Windows 10、Ruby 2.5.5 和 MySQL Server 5.7 (所有都是 x64 位) 上运行良好。谢谢。 - marianc

1
我尝试了所有提供的方法,但是同样的错误一遍又一遍地出现:(
幸运的是,旧版本安装时没有出现任何错误!
gem uninstall mysql2
gem install mysql2 -v 0.2.6

幸运的是,它不起作用。 - fsalazar_sch

1

这是对于我在Windows 8 64位系统上使用ruby 64位时遇到相同错误的解决方法

  1. 下载并安装MySQL Server 5.6 64位版本。
  2. 运行以下命令:

    gem install mysql2 -v '0.3.16' -- '--with-mysql-lib="c:\Program Files\MySQL\MySQL Server 5.6\lib" --with-mysql-include="c:\Program Files\MySQL\MySQL Server 5.6\include"'
    
希望这有所帮助。

很高兴知道这也有效,对于我的项目,我已经有了远程数据库,所以不需要安装! - Mrk Fldig
顺便提一下,据我所知,railsinstaller是32位的,因此需要根据下面的说明使用32位的库。 - Mrk Fldig

0
尝试按照以下步骤操作:
我假设:
  • a) 你使用的是Windows7
  • b) Ruby 2+ 安装在 C:\Ruby200-x64
  • c) Rails 4+ 已经安装在 Ruby 上
  • d) WAMP 安装在 C:\wamp 并且正在运行
1)卸载你的mysql2 gem:
$ gem uninstall mysql2

2) 使用路径选项重新安装mysql2 gem:

$ gem install mysql2 -- '--with-mysql-lib="C:\wamp\bin\mysql\mysql5.6.12\lib" --with-mysql-include="C:\wamp\bin\mysql\mysql5.6.12\include"'

3) 将在 C:\wamp\bin\mysql\mysql5.6.12\lib 找到的 libmysql.dll 复制到 C:\Ruby200-x64\bin 中。

4) 在 Rails 应用程序中打开 "Gemfile" 文件并通过添加来启用 mysql2:

gem 'mysql2'

5) 启动你的 Rails 服务器:

$ rails server

6) 打开你的浏览器,访问 localhost:3000/


0

在安装 gem 之前,也可以尝试关闭您的杀毒软件。我的 gem 在我执行以下命令后安装成功:

gem install mysql2 --platform=ruby -- '--with-mysql-lib=
"C:\mysql-connector\lib" --with-mysql-include="C:\mysql-connector\include" --wit
h-mysql-dir="C:\mysql-connector"'

当我的防病毒软件启用时,同样的命令无法正常工作,因为它将某些 Ruby 文件推送到了隔离区。希望这能帮助到其他人。


谢谢!我到处都找过了,但都没用。这个方法对我有用。 - Padagomez

0

对于Cygwin,我可以简化各种步骤。

  1. 使用cygwin setup.exe下载gcc、g++、make、cmake和libmysqlclient-devel(从cygwin ports)
  2. 从mysql网站下载Windows的c/connector源代码。我下载了6.x版本。或者下载libmysqlclient-devel的版本(不确定来源)
  3. 解压缩
  4. cd dir_connector
  5. 不是必需的,但是有风险,如果cygwin libmysqlclient-devel版本为5.5.40,则将dir_connector / VERSION文件的版本更改为5.5.40
  6. mkdir build
  7. cd build
  8. 注释stdlib.h中的dtoa,否则编译失败
  9. cmake ..
  10. make
  11. make install
  12. gem install mysql2 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

0

我仍然在使用mysql2 gem时遇到问题,但以下方法帮助我在Windows环境下安装了RoR的mysql。

步骤1:Gem文件更改:({app}/Gemfile)

将mysql2更新为mysql

步骤2:database.yml文件更新({app}/config/database.yml)

将adapter: mysql2更改为adapter: mysql

将host: localhost更改为host: 127.0.0.1

步骤3:下载mysql-connector-c-noinstall-6.0.2-win32

步骤4:将mysql-connector-c-noinstall-6.0.2-win32\lib\libmysql.dll文件复制到C:\RailsInstaller\Ruby1.9.3\bin

步骤5:bundle update && 启动rails服务器


0

这是对我有效的方法:

gem install mysql2 -- '--with-mysql-dir="C:\wamp\bin\mysql\mysql5.5.xx"'

已经搜索了几个小时,没有看到这种变化的建议,希望它能帮助到某些人!


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