简体   繁体   English

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

[英]Ruby on Rails - cannot load such file — mysql2/2.2/mysql2 (LoadError)

I was using SQLite for my Rails project but when I heard that Heroku doesn't support SQLite, I switched to MYSQL.我在 Rails 项目中使用 SQLite,但是当我听说 Heroku 不支持 SQLite 时,我切换到了 MYSQL。

After switching my database, I started my rails server "rails s" but it gives me the following error:切换数据库后,我启动了 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>'

This is my gemfile:这是我的 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'

I searched thoroughly, found some answers but it didn't work.我彻底搜索,找到了一些答案,但没有用。

I pasted my libmysql.dll file from Program Files/MySQL Server 5.6 to Ruby/bin but still no luck.我将我的libmysql.dll文件从Program Files/MySQL Server 5.6粘贴到Ruby/bin但仍然没有运气。 I performed the following commands:我执行了以下命令:

gem uninstall mysql2

gem install mysql2 --platform=ruby

I followed this tutorial and still got the same error: Error "...cannot load such file -- mysql2/2.0/mysql2 (LoadError)".我按照本教程进行操作,但仍然遇到相同的错误: 错误“...无法加载此类文件 -- mysql2/2.0/mysql2 (LoadError)”。 On Windows XP with Ruby 2.0.0 在带有 Ruby 2.0.0 的 Windows XP 上

I will highly appreciate it if someone will help me out, so that I can deploy it to Heroku.如果有人帮助我,我将不胜感激,以便我可以将其部署到 Heroku。

Thanks.谢谢。

The problem is that the mysql2 gem is not installing with its native dependencies.问题是mysql2 gem 没有安装其本机依赖项。 In previous versions of Ruby, this would have triggered the unable to build native gem extension error:在以前的 Ruby 版本中,这会触发unable to build native gem extension错误:

在此处输入图片说明

Something has changed in Ruby 2.2 so that you can install the gem without it building the native extension. Ruby 2.2中发生了一些变化,因此您可以在不构建本机扩展的情况下安装 gem。 This does not mean the problem is resolved however - and so you have to ensure you install the gem with the appropriate dependencies.然而,这并不意味着问题已解决 - 因此您必须确保安装具有适当依赖项的 gem。

Tutorial : 教程

  1. Download C-Connector from MYSQL (note your version of Ruby -- if you're using 64 bit, download the 64 bit version)从 MYSQL 下载 C-Connector (注意您的 Ruby 版本——如果您使用的是 64 位,请下载 64 位版本)

  2. Unzip / Install the MYSQL C-Connector folder onto your HDD (don't have any spaces in the path)将 MYSQL C-Connector 文件夹解压缩/安装到硬盘上(路径中没有任何空格)

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

  4. This should install the gem with the files it needs应该使用它需要的文件安装 gem

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

The difference between this install and the previous one will be that this should mention that the native gem extensions are being installed ( This could take a while ), which suggests that Ruby is looking at the library.此安装与前一个安装之间的区别在于,这应该提及正在安装本机 gem 扩展( This could take a while ),这表明 Ruby 正在查看该库。

This time, if it installs correctly, it should work for you.这一次,如果它安装正确,它应该适合你。

-- ——

If you're still seeing an error, you'll have to uninstall any existing versions of the mysql2 gem on your system:如果您仍然看到错误,则必须卸载系统上任何现有版本的mysql2 gem:

如何安装mysql2。

If you're getting an error, you just need to type gem uninstall mysql2 , select all and then repeat the steps above.如果您收到一个错误,你只需要输入gem uninstall mysql2 ,选择all ,然后重复上述步骤。

In step 3 above I had to use an extra pair of '-' and no quotes around the path.在上面的第 3 步中,我不得不使用一对额外的“-”,并且路径周围没有引号。

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

I'm using Win 7我正在使用 Win 7

I just got them same problem after updating from Ruby 2.1.5 to 2.2.1.从 Ruby 2.1.5 更新到 2.2.1 后,我刚刚遇到了同样的问题。 The problem seems to be the mysql2 gem that's used by Rails as a binding to libmysql .问题似乎是 Rails 使用的mysql2 gem 作为libmysql的绑定。 Apparently it does not support the Ruby 2.2 branch but only 2.0 and 2.1.显然它不支持 Ruby 2.2 分支,而只支持 2.0 和 2.1。

I had the same problem so I switched to using RubyInstaller.我遇到了同样的问题,所以我改用 RubyInstaller。 I no longer have the problem.我不再有这个问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM