Ruby on Rails - 无法加载此类文件 -- mysql2/2.2/mysql2 (LoadError)

Ruby on Rails - cannot load such file -- mysql2/2.2/mysql2 (LoadError)

我在我的 Rails 项目中使用 SQLite,但是当我听说 Heroku 不支持 SQLite 时,我切换到 MYSQL。

切换我的数据库后,我启动了我的 rails 服务器 "rails s" 但它给了我以下错误:

    C:\Sites\simple_cms>rails server
C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql2-0.3.18-x64-mingw32/lib/mysql2/mysql2.rb:2:in `require'
: cannot load such file -- mysql2/2.2/mysql2 (LoadError)
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql2-0.3.18-x64-mingw32/lib/mysql2/mysql2.rb:2
:in `<top (required)>'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql2-0.3.18-x64-mingw32/lib/mysql2.rb:31:in `r
equire'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql2-0.3.18-x64-mingw32/lib/mysql2.rb:31:in `<
top (required)>'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler/runtime.rb:76:in `requ
ire'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler/runtime.rb:76:in `bloc
k (2 levels) in require'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler/runtime.rb:72:in `each
'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler/runtime.rb:72:in `bloc
k in require'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler/runtime.rb:61:in `each
'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler/runtime.rb:61:in `requ
ire'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.8.4/lib/bundler.rb:134:in `require'
        from C:/Sites/simple_cms/config/application.rb:7:in `<top (required)>'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks
.rb:78:in `require'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks
.rb:78:in `block in server'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks
.rb:75:in `tap'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks
.rb:75:in `server'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks
.rb:39:in `run_command!'
        from C:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top
 (required)>'
        from bin/rails:4:in `require'
        from bin/rails:4:in `<main>'

这是我的 gemfile:

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.2.0'
# Use mysql as the database for Active Record
gem 'mysql2'

我彻底搜索,找到了一些答案,但没有用。

我将我的 libmysql.dll 文件从 Program Files/MySQL Server 5.6 粘贴到 Ruby/bin,但仍然没有成功。我执行了以下命令:

gem uninstall mysql2

gem install mysql2 --platform=ruby

我按照本教程进行操作,但仍然遇到相同的错误:Error "...cannot load such file -- mysql2/2.0/mysql2 (LoadError)". On Windows XP with Ruby 2.0.0

如果有人能帮助我,我将不胜感激,这样我就可以将它部署到 Heroku。

谢谢。

从 Ruby 2.1.5 更新到 2.2.1 后,我遇到了同样的问题。问题似乎是 Rails 使用的 mysql2 gem 作为对 libmysql 的绑定。显然它不支持 Ruby 2.2 分支,但只支持 2.0 和 2.1.

我遇到了同样的问题,所以我改用 RubyInstaller。我不再有问题了。

问题是 mysql2 gem 没有安装其本地依赖项。在 Ruby 的早期版本中,这会触发 unable to build native gem extension 错误:

Ruby 2.2 中发生了一些变化,因此您 可以 安装 gem 而无需构建本机扩展。然而,这并不意味着问题已解决 - 因此您必须确保安装具有适当依赖项的 gem。

Tutorial:

  1. Download C-Connector from MYSQL(注意您的 Ruby 版本——如果您使用的是 64 位,请下载 64 位版本)

  2. 解压缩/安装 MYSQL C-Connector 文件夹到您的硬盘上(路径中不要有任何空格)

  3. 运行 以下命令:gem install mysql2 --platform=ruby -- '--with-mysql-dir="C:/your-mysql-connector-path"'

  4. 应该安装gem和它需要的文件

  5. 然后你可以从C:/your-mysql-connector-path复制libmysql.dll -> c:/your-ruby-install/bin`

此安装与上一个安装的区别在于,此 应该 提及正在安装本机 gem 扩展 (This could take a while),这表明 Ruby 正在查看图书馆。

这一次,如果安装正确,它应该适合你。

--

如果您仍然看到错误,则必须卸载系统上 mysql2 gem 的任何现有版本:

如果出现错误,您只需键入 gem uninstall mysql2、select all,然后重复上述步骤。

在上面的第 3 步中,我不得不使用一对额外的“-”并且路径周围没有引号。

gem install mysql2 -- --with-mysql-dir=C:\mysql-connector-dir

我使用的是 Win 7