19

我无法在我的 Windows7 x64 系统中安装 mysql2 gem。我尝试同时使用 32 位和 64 位版本的 MySQL 服务器,但没有一个能让我更进一步。

我安装了 Ruby 1.8、开发工具包和 Rails 平台。我什至安装了 minGW 来允许 C++/C 编译东西。MySQL 服务器安装在默认位置。

运行命令时:

C:\Users\Arne>gem install mysql2 -- --with-mysql-include="C:\Program Files (x86)\MySQL\MySQL Server 5.1\include" --with-mysql-lib="C:\Program Files (x86)\MySQL\MySQL Server 5.1\lib\"

我从控制台收到以下输出:

Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
*** 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:/Ruby/bin/ruby
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include=${mysql-dir}/include
        --with-mysql-lib=${mysql-dir}/lib
        --with-libmysqllib
        --without-libmysqllib
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

        C:/Ruby/bin/ruby.exe extconf.rb --with-mysql-include=C:\Program Files (x
86)\MySQL\MySQL Server 5.1\include --with-mysql-lib=C:\Program Files (x86)\MySQL
\MySQL Server 5.1\lib"
checking for rb_thread_blocking_region()... no
checking for main() in -llibmysql... no


Gem files will remain installed in C:/Ruby/lib/ruby/gems/1.8/gems/mysql2-0.3.2 f
or inspection.
Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/mysql2-0.3.2/ext/mysql2/gem_mak
e.out

根据 Rubygems,我的环境的输出是:

C:\Users\Arne>gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.7.2
  - RUBY VERSION: 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  - INSTALLATION DIRECTORY: C:/Ruby/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: C:/Ruby/bin/ruby.exe
  - EXECUTABLE DIRECTORY: C:/Ruby/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-mingw32
  - GEM PATHS:
     - C:/Ruby/lib/ruby/gems/1.8
     - C:/Users/Arne/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

系统上还安装了以下 gem:

C:\Users\Arne>gem list --local

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.7)
actionpack (3.0.7)
activemodel (3.0.7)
activerecord (3.0.7)
activeresource (3.0.7)
activesupport (3.0.7)
arel (2.0.9)
builder (3.0.0, 2.1.2)
bundler (1.0.12)
erubis (2.7.0, 2.6.6)
fastthread (1.0.7)
i18n (0.5.0)
mail (2.3.0, 2.2.18)
mime-types (1.16)
mysql (2.8.1 x86-mingw32)
polyglot (0.3.1)
rack (1.2.2)
rack-mount (0.7.2, 0.6.14)
rack-test (0.5.7)
rails (3.0.7)
railties (3.0.7)
rake (0.8.7)
rdoc (3.5.3, 2.5.11)
rdoc-data (2.5.3)
rubygems-update (1.7.2)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.27, 0.3.26)

我不知道有什么遗漏或错误,但脚本指向的输出文件包含以下数据:

mkmf.log:

have_func: checking for rb_thread_blocking_region()... -------------------- no

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I.    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -L.      -lmsvcrt-ruby18-static  -lshell32 -lws2_32  "
conftest.c: In function 't':
conftest.c:7:53: error: 'rb_thread_blocking_region' undeclared (first use in this function)
conftest.c:7:53: note: each undeclared identifier is reported only once for each function it appears in
checked program was:
/* begin */
1: #include <ws2tcpip.h>
2: #include <winsock2.h>
3: #include <windows.h>
4: 
5: /*top*/
6: int main() { return 0; }
7: int t() { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return 0; }
/* end */

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I.    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -L.      -lmsvcrt-ruby18-static  -lshell32 -lws2_32  "
C:\Users\Arne\AppData\Local\Temp\ccCicaNu.o: In function `t':
C:\Ruby\lib\ruby\gems\1.8\gems\mysql2-0.3.2\ext\mysql2/conftest.c:3: undefined reference to `rb_thread_blocking_region'
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { rb_thread_blocking_region(); return 0; }
/* end */

--------------------

have_library: checking for main() in -llibmysql... -------------------- no

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -IC:\Program    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -LC:\Program -L.      -lmsvcrt-ruby18-static -llibmysql  -lshell32 -lws2_32  "
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibmysql
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include <ws2tcpip.h>
2: #include <winsock2.h>
3: #include <windows.h>
4: 
5: /*top*/
6: int main() { return 0; }
7: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
/* end */

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -IC:\Program    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -LC:\Program -L.      -lmsvcrt-ruby18-static -llibmysql  -lshell32 -lws2_32  "
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibmysql
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { main(); return 0; }
/* end */

--------------------

gem_make.out:

C:/Ruby/bin/ruby.exe extconf.rb --with-mysql-include=C:\Program Files (x86)\MySQL\MySQL Server 5.1\include --with-mysql-lib=C:\Program Files (x86)\MySQL\MySQL Server 5.1\lib"
checking for rb_thread_blocking_region()... no
checking for main() in -llibmysql... no

我希望有人能指出我做错了什么,或者我的开发系统中实际上缺少什么来正确安装和工作这个 gem。

4

9 回答 9

41

我终于解决了:

  1. 下载并安装 MySQL 64bit 版本 5.5
  2. 下载了 32 位 5.5 版的 zip 存档。
  3. 将 32 位 include 和 lib 文件夹提取到C:\MySQL.
  4. 安装了 Ruby 1.9.2。
  5. 安装了 Ruby Devkit。
  6. 安装宝石:
    1. gem install mysql
    2. gem install mysql2 -- --with-mysql-lib=C:\MySQL\lib --with-mysql-include=C:\MySQL\include
    3. gem install rails
    4. gem install fastthread
    5. gem install haml

它现在就像一个魅力。似乎 MySQL gem 在处理 64 位时查找数据存在问题。

于 2011-05-02T06:25:50.370 回答
19

这对我有用:Win7 64/MySQL 5.5 64-bit/Ruby 1.9.2:

  1. 下载libmysql.dll
  2. 将上面的 libmysql.dll 复制到C:\Ruby192\bin AND C:\Ruby192\lib,或者您的 lib 和 bin 所在的任何位置。
  3. 跑:
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\包括" --with-mysql-dir="c:\Program Files\MySQL\MySQL Server 5.5"'

祝你好运。

于 2011-09-23T19:47:55.830 回答
6

如果仍然出现错误,请交叉检查安装步骤 -

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

大多数用户在按照描述的步骤安装 mysql2 gem 的地方。

于 2011-05-30T18:42:29.190 回答
3

我知道该线程与 Windows 有关,但我在 Linux 上搜索相同的问题并通过安装 lib“libmysqlclient-dev”修复它

于 2013-05-06T12:08:01.847 回答
2

接受的答案对我不起作用,其他 2 也没有。但是,MG 对 Ritesh 链接的评论对我有用。我必须指定版本 0.2.6,并包含参数 --platform=ruby。(注意:我还必须下载 MySQL 的“noinstall”版本才能获得 /lib/opt)

这是我在 Windows 上安装 gem 的方法

gem install mysql2 -v 0.2.6 -- --platform=ruby --with-mysql-lib=C:\Ruby192\MySQL\lib\opt --with-mysql-dir=C:\Ruby192\MySQL
于 2011-06-14T04:10:15.593 回答
1

我在 64 位 Windows 7 下使用 MySQL 5.6 时遇到了类似的问题。这里给出的主要解决方案有效。(kobalz 建议的仅复制 dll 的解决方案不起作用。不知道为什么它适用于 kobalz 但不适用于我!)

然后我遇到了这篇文章中描述的另一个问题:

mysql2 gem 为错误的 mysql 客户端库编译

那里描述的解决方案避免了下载完整的 32 位 MySQL 并修复了这两个问题。本质上,下载 mysql 连接器(下载量要小得多)并使用它来编译 mysql2 gem。如帖子中所述,您必须下载完全正确的版本。就我而言:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

然后如上所述将 lib\libmysql.dll 文件从那里复制到您的 Ruby bin 目录中。

我将连接器放入 c:\mysql-connector-c-noinstall-6.0.2-win32

所以构建和安装 gem 的命令是:

gem install mysql2 -- --with-mysql-lib="c:\mysql-connector-c-noinstall-6.0.2-win32\lib" --with-mysql-include="c:\mysql-connector-c -noinstall-6.0.2-win32\include" --with-mysql-dir="c:\mysql-connector-c-noinstall-6.0.2-win32"

然后,当我运行 rake 进行迁移时,我遇到了更多问题,但那是因为我一直在使用 mysql gem(不是 mysql2)并且我忘记了更新我的 database.yml。使用 mysql2 gem,它需要说:

开发:适配器:mysql2

而不是

开发:适配器:mysql

一旦您弄清楚了,这很明显,但是我收到的错误消息与我之前收到的错误消息相似,因此看起来我的 gem 仍然有问题。

于 2013-08-07T17:22:08.623 回答
1

这个对我来说适用于 MariaDB 5.5 安装:

gem install mysql2 -- '--with-mysql-lib="c:\Program Files (x86)\MariaDB 5.5\lib" --with-mysql-include="c:\Program Files (x86)\MariaDB 5.5\包括\mysql"'

使用以下命令构建本机扩展:'--with-mysql-lib="c:\Program Files (x86)\Maria DB 5.5\lib" --with-mysql-include="c:\Program Files (x86)\MariaDB 5.5 \包括\mys ql"'

如果您计划使用 Ruby x64,请务必使用 x64 MariaDB 包。当然,在我的情况下,不要忘记将 C:\Program Files (x86)\MariaDB 5.5\lib\libmysql.dll 复制到 c:\Ruby200\bin。

于 2013-12-23T16:13:57.100 回答
0

将位于 MySQL 安装的 bin 目录中的 libmysql.dll 复制到 Ruby 安装的 bin 目录中。我的位于 C:\Program Files\MySQL 和 C:\Ruby。

于 2011-04-30T11:39:45.677 回答
0

这就是在 Windows 8 64bit 和使用 ruby​​ 64bit 上对我有用的方法

下载并安装MYSQL Server 5.6 64bit

然后运行命令:

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 服务器 5.6\include"'

希望这可以帮助

于 2014-08-12T01:38:40.477 回答