Rails 4 - Gem :: LoadError:为数据库适配器指定'mysql2',但未加载gem

new*_*ere 150 ruby-on-rails mysql2 ruby-on-rails-4 ruby-on-rails-4.1 ruby-on-rails-4.2

在我的gemfile中我有:

gem 'mysql2'
Run Code Online (Sandbox Code Playgroud)

我的database.yml如下:

default: &default
  adapter: mysql2
  database: <%= ENV['db_name'] %>
  username: <%= ENV['db_user'] %>
  password: <%= ENV['db_pass'] %>
  host:     <%= ENV['db_host'] %>
  pool: 32
  socket:   <%= ENV['socket'] %>

development:
  <<: *default

production:
  <<: *default
Run Code Online (Sandbox Code Playgroud)

我已经运行了两个bundle update并且bundle install我的Gemfile.lock显示了mysql2.

但是,当我运行时,我rake db:migrate在我的计算机和登台服务器上都得到了这个:

myproject.com(master)$ rake db:migrate
WARNING: Use strings for Figaro configuration. 10000012508 was converted to "10000012508".
WARNING: Use strings for Figaro configuration. 860526407370038 was converted to "860526407370038".
rake aborted!
Gem::LoadError: Specified 'mysql2' for database adapter, but the gem is not loaded. Add `gem 'mysql2'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord).
.....
Run Code Online (Sandbox Code Playgroud)

只是为了确保没有错误版本的mysql2或其他东西,我做bundle clean --forcebundle install并且bundle update再次运行,当我运行时,gem list我看到mysql2 (0.4.0)并没有其他版本.

任何想法都将非常感激.


这是目前Rails 4.1.x和4.2.x的问题,根据这个错误报告,它将在下一版本的rails 4.2.x中修复(在链接的评论中归功于dcorr).

同时您可以通过将此行添加到您的gemfile中来降级到版本0.3.18的mysql2来修复:

gem 'mysql2', '~> 0.3.18'
Run Code Online (Sandbox Code Playgroud)

Kal*_*lah 67

做就是了:

gem 'mysql2', '~> 0.3.18' 这个宝石适用 rails version 4.x.x

如果安装gem 'mysql2', '~> 0.4.0'它会产生gem加载错误并导致兼容性问题


Ric*_*eck 50

只需进一步更新 - 问题中的解决方案是正确的.

第4条评论值得注意:

这不是mysql2的错误,它是ActiveRecord适配器中的要求的问题:http://github.com/rails/rails/issues/21544.这在rails master中得到修复:https: //github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

我能够绑定Rails 4.2.44-2-stable分支并使用最新的mysql2:

在此输入图像描述

gem 'rails', '~> 4.2.4', git: "git://github.com/rails/rails.git", branch: '4-2-stable'
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw] #-> Rails 4.1+

#DB
gem 'mysql2'
Run Code Online (Sandbox Code Playgroud)

  • 应该用Rails 5来解决这个问题:) (2认同)

Jos*_*ree 8

这个特定问题的答案与发布时间和使用的Rails版本有关,问题是由于执行a bundle update和你的mysql2版本更新到0.4.x而导致与最新的Rails ActiveRecord存在不兼容问题.

同样,请注意这不是使用旧版Rails/ActiveRecord的人的解决方案.

快速解决方案是简单地mysql2在gemfile中指定版本,如下所示:

gem 'mysql2', '0.3.20'

长期解决方案是等待ActiveRecord的更新或mysql2中的某些更改.


Abr*_*ram 8

这个问题在这里得到解决:https://github.com/brianmario/mysql2/issues/950

对于Rails 4.x,请将gem固定到mysql2'〜> 0.4.0'以避免0.5.x升级.

的Gemfile:

gem 'rails', '4.2.8'
gem 'mysql2', '~> 0.4.0'
Run Code Online (Sandbox Code Playgroud)

然后跑 bundle update rails mysql2

我目前正在使用mysql v 8.0.11


小智 7

如果你能够升级你的rails版本,那么将你的Gemfile更改为此,它将解决问题而不降级mysql2 gem版本:

gem 'rails', '4.2.6'
Run Code Online (Sandbox Code Playgroud)


avi*_*v p 5

作为一个完整的初学者,我对如何做到这一点感到困惑,所以我只是做了一次试验检查,最后让我的服务器工作,这是我如何工作.

进入工作目录("工作")的文件,然后从那里进入你创建的应用程序的文件("sample_app"),其中安装了mysql 2转到gem文件("Gemfile")编辑gem'mysql2 'gem 'mysql2','〜> 0.3.18'

现在回到cmd并运行命令"bundle install".

因此,考虑到括号中的上述文件,编辑文件的目录应该是."C:\工作\ sample_app \的Gemfile"

希望我有所帮助.