11

该命令rails server引发此错误。

C:/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.3.11-x86-mingw32/lib/mysql2/mysql2.rb:2:in `require': cannot load
 such file -- mysql2/2.0/mysql2 (LoadError)

我在 Windows XP 机器上使用来自RubyInstaller的Ruby 2.0.0 。

我想出了问题所在,但我不知道如何解决。问题是gem中没有任何2.0/目录。mysql2-0.3.11-x86-mingw32这是从Gemfilerails作为其依赖项安装的 gem :

GEM
  remote: https://rubygems.org/
  specs:
     ... many gems here
     mysql2 (0.3.11-x86-mingw32)
     ... many gems here
DEPENDENCIES
  ...
  mysql2
  ...

这是该mysql2.rb文件中的内容:

# C:\Ruby200\lib\ruby\gems\2.0.0\gems\mysql2-0.3.11-x86-mingw32\lib\mysql2\mysql2.rb

RUBY_VERSION =~ /(\d+.\d+)/
require "mysql2/#{$1}/mysql2"  # <<-- this is that #2 line that throws an error

很明显,它采用当前的 Ruby 版本号并将其用作到达某个mysql2文件的路径段。其实就是mysql2.so文件。当我使用Ruby 2.0.0时,路径段是2.0

mysql2/2.0/mysql2

好的,现在让我们看看mysql2-0.3.11-x86-mingw32gem 的目录是怎样的:

dir: C:\Ruby200\lib\ruby\gems\2.0.0\gems\mysql2-0.3.11-x86-mingw32\lib\mysql2\

在此处输入图像描述

没有任何2.0/目录。

我知道有关libmysql.dll的问题。我在我的C:\Ruby200\bin. 它没有帮助。

我从 RubyInstaller 的创建者那里读到了这个答案https://stackoverflow.com/a/5368767/1114926 。我试过但没有帮助。它适用,Ruby 1.9.3因为有1.9/目录。但它不适用于Ruby 2.0.0.

如何解决?


更新 1:

谢谢你的回答。我试过了。不幸的是我有ERROR: Failed to build gem native extension.错误:

C:\>gem install mysql2 --platform=ruby
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()... *** 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
C:/Ruby200/lib/ruby/2.0.0/mkmf.rb:431:in `try_do': The compiler failed to generate an executable file. (Runtim
eError)
You have to install development tools first.
... other code follows here...

它说:

您必须先安装开发工具。

但是我已经安装了完整的 DevKit,RubyInstaller 安装了它。无法理解它还需要什么。

我已经在mysql2GitHub 页面https://github.com/brianmario/mysql2/issues/364上发布了一个问题。还没有答案。

4

5 回答 5

13

在带有 Ruby 2.0.0 和 DevKit 4.7 的 Windows 7 x64 上遇到了完全相同的问题。

以下步骤帮助了我。

  1. 宝石卸载mysql2

  2. 从http://cdn.mysql.com/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip下载最后一个 MySQL 连接器

  3. 将其解压缩到C:\connector-6.0.2

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

甚至更短:

gem install mysql2 --platform=ruby --with-opt-dir="C:\connector-6.0.2"

于 2013-04-06T17:28:21.577 回答
5

uninstall mysql2-0.3.11-x86-mingw32,之前编译的 gemRuby200将不起作用。你必须自己编译它。如果您运行gem uninstall mysql2并且列出了未编译的版本,那么只需卸载mysql2-0.3.11-x86-mingw32- 其他编译版本...

安装 gem install mysql2 --platform=ruby。那行得通。

按照本指南安装 devkit http://rubyonwindowsguides.github.com/book/ch02-04.html

然后再试一次。

于 2013-03-25T11:13:45.390 回答
2

我几乎完成了@odiszapc 所描述的相同操作。卸载旧gem,下载mysql-connector-c-noinstall,解压,但最后我用这个命令构建原生gem:

gem install mysql2 --platform=ruby -- --with-opt-dir=/c/connector-6.0.2

(如果你使用 git-bash 那么你可以使用 unix 风格的目录语法。)

于 2013-04-08T11:52:20.317 回答
2

从该链接复制粘贴:https ://github.com/brianmario/mysql2/issues/359 。它对我有用。


如果在安装 gem 之后,你会得到一个错误:

“找不到指定的模块
。C:/Devel/Ruby200/lib/ruby/gems/2.0.0/gems/mysql2-0.3.11/lib/mysql2/mysql2.so”

这可以通过复制libmysql.dll到 Ruby 的 bin 文件夹来解决。

于 2013-06-19T23:04:04.600 回答
2

当我尝试在 Windows XP 上安装 Redmine 时,行为完全相同

  • 当我尝试执行“rake generate_secret_token”时,我得到“无法加载此类文件——mysql2/2.0/mysql2 (LoadError)”
  • 当我尝试使用 --platform=ruby 重新构建 mysql2 时,我得到了和你一样的绿色消息。

目前,我被困在那里......但如果有人有什么可以让我继续前进,那将是非常受欢迎的。我也会随时通知

安托万

于 2013-03-27T08:06:46.060 回答