Rails 4 - Gem::LoadError: 指定数据库适配器为'mysql2',但是该宝石未加载。

153

我的Gemfile文件中有以下内容:

gem 'mysql2'

我的 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

我已经运行了bundle updatebundle 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).
.....

为确保没有出现mysql2的错误版本等问题,我执行了bundle clean --force命令,并重新运行了bundle installbundle update命令,当我运行gem list时,我看到只有mysql2 (0.4.0)这个版本。

如果有任何想法,请不吝赐教。


解决方案

目前这是Rails 4.1.x和4.2.x的一个问题,参见此错误报告,将在下一个版本的rails 4.2.x中修复(感谢评论中的dcorr提供链接)。

在此期间,您可以通过将以下行添加到您的Gemfile中,降级为mysql2的0.3.18版本来解决该问题:

gem 'mysql2', '~> 0.3.18'

1
Try bundle update mysql2 - Pavan
我也尝试过了,但没有成功。从我的观察来看,mysql2 (0.4.0) 是 Ruby gems 可以使用的最新版本,而且已经安装好了。 - newUserNameHere
12
这里是解决方案:在Gemfile中添加gem 'mysql2', '~> 0.3.18' - newUserNameHere
6
这并不是mysql2的错误,而是ActiveRecord适配器中要求的问题:https://github.com/rails/rails/issues/21544。这已在rails主干版本中得到修复:https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692。 - dcorr
如果在Rails主分支中修复了该问题,我们可以从Rails github存储库的URL拉取那个版本吗? - Richard Peck
显示剩余2条评论
10个回答

69

只需要这样做:

gem 'mysql2','〜>0.3.18' 这个 gem 与 rails 版本 4.x.x 兼容。

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


简洁、简单明了。谢谢! - Am33d
对我有用 @kaleem - khalidh

53

更新:问题中的解决方案是正确的。

第4个评论值得注意:

这不是mysql2的bug,而是ActiveRecord适配器中的要求问题:http://github.com/rails/rails/issues/21544。 这已经在rails主代码库中被修复: https://github.com/rails/rails/commit/5da5e3772c32593ecf2f27b8865e81dcbe3af692

我能够将 Rails 4.2.44-2-stable分支关联起来,并且可使用最新的mysql2使其正常工作:

enter image description here

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'

如果速度是首要考虑因素,将mysql2降级至“0.3.20”而不是将rails“4.2.4”固定到分支:“4-2-stable”会稍微快一些。 - seanriordan08
很难相信MySQL gem与PostgreSQL相比有这么多小气的bug问题 T__T - newBike
这是Windows环境 - 与Imagemagick等相同。您必须使用外部依赖项,由于Windows没有它们的中央存储库,因此变得棘手。 - Richard Peck
Rails 5怎么样? - Richard Peck
@RichardPeck 我在Rails 5.0.3中遇到了这个问题。 - garci560
适用于Rails 5.1 - Richard Peck

13

问题已经在这里得到解决: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'

然后运行bundle update rails mysql2

我目前正在使用mysql v 8.0.11


9
根据发布时间和使用的Rails版本,回答这个问题的答案是,这个问题是由于执行了bundle update并且您的mysql2版本更新到0.4.x,而最新的Rails ActiveRecord存在不兼容性问题所导致的。
请注意,这不是适用于使用旧版Rails / ActiveRecord的人的解决方案。
快速的解决方案是在你的gemfile中简单地指定mysql2版本,方法如下: gem 'mysql2', '0.3.20' 长期的解决方案将是等待ActiveRecord的更新或者mysql2发生变化。

7
如果您能升级Rails版本,请将您的Gemfile更改为以下内容,它将解决问题而无需降低mysql2 gem版本:
gem 'rails', '4.2.6'

5
作为一个完全的初学者,我对如何做这个感到困惑,所以我进行了一次试验检查,最终让我的服务器工作了,以下是我是如何让它工作的。
进入工作目录("work")下的文件,然后进入您创建的应用程序("sample_app")下的文件,该文件中已安装mysql2,转到gem文件("Gemfile")并编辑gem 'mysql2'gem 'mysql2','~> 0.3.18' 现在回到cmd并运行命令"bundle install"。
因此,考虑上述括号中的文件,编辑文件的目录应为"c\work\sample_app\Gemfile"
希望我能帮到您。

4

当您的机器上缺少mysql软件包时,通常会出现此问题。在运行gem install mysql2时是否收到任何错误?您使用的操作系统是什么?

如果您使用的是Debian或Ubuntu,请尝试sudo apt-get install libmysqlclient-dev命令。

还要确保gem未放置在Gemfile文件的group语句中。


+1 给你的帮助。然而我已经安装了 libmysqlclient-dev,而且这个 gem 不在一个 group 语句中。奇怪的是,在我的其他项目中它可以正常工作,只有在这个项目中出现问题。此外,这不是我操作系统的新安装,我已经有一段时间没有更改我的环境了。在测试服务器上也是如此,我也遇到了同样的问题。 - newUserNameHere

1

我遇到了同样的问题,但是在 gem 文件顶部添加 source 'https://rubygems.org' 解决了这个问题。

步骤:

source 'https://rubygems.org' 添加到您的 gem 文件中。 注释掉 mysql2 gem 并添加 gem 'mysql2', '~> 0.3.18' 运行 bundle install


0

试试这个:

bundle update mysql2

此命令将更新您的'mysql2' gem到最新版本(应为0.3.17或更高版本)并启动您的Rails服务器。


0
gem 'rails', '4.2.11.3'
gem 'mysql2', '~> 0.4.0'

试试这个。这将解决mysql2加载错误的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接