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


150

在我的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 install,并bundle 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
试试bundle update mysql2
Pavan

我也尝试过。没用 从我看到的mysql2 (0.4.0)是,ruby gems将采用最新版本,并且已经安装。
newUserNameHere 15'Sep

12
解决方法如下:gem 'mysql2', '~> 0.3.18'在Gemfile中。
newUserNameHere

6
这不是mysql2的错误,而是ActiveRecord适配器中的要求存在问题:github.com/rails/rails/issues/21544。:这是固定在导轨主github.com/rails/rails/commit/...
dcorr

@Pavan Awsome maahn !! _ / _
Varun

Answers:


50

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

第四条评论值得注意:

这不是mysql2的错误,而是ActiveRecord适配器中的要求存在问题:http : //github.com/rails/rails/issues/21544。在Rails主站中已修复此问题: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'

如果优先考虑速度,那么将mysql2降低到“ 0.3.20”要快一些,而不是将“ 4.2.4”固定到分支“ 4-2-stable”。
seanriordan08 '01

很难相信mysql gem与postgreSQL T__T相比有这么多小气的越野车问题
newBike

这是Windows环境-与Imagemagick等相同。您必须使用外部依赖项,并且由于Windows没有针对它们的中央存储库,因此变得棘手
Richard Peck

那Rails 5呢?
理查德·派克

@RichardPeck我在Rails 5.0.3中
遇到

67

做就是了:

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

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


干净,简单,简洁。谢谢!
Am33d

为我工作@kaleem
khalidh

9

此问题已在此处解决:https//github.com/brianmario/mysql2/issues/950

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

宝石文件:

gem 'rails', '4.2.8'
gem 'mysql2', '~> 0.4.0'

然后跑 bundle update rails mysql2

我目前正在使用mysql v 8.0.11


8

这个特定问题的答案与发布时间和所使用的Rails版本有关,是该问题是由a引起的,bundle update并且您的mysql2版本更新为0.4.x,这与最新的Rails ActiveRecord不兼容。

再次提醒您,这不是使用旧版Rails / ActiveRecord的用户的解决方案。

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

gem 'mysql2', '0.3.20'

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


7

如果您能够升级rails版本,则将您的Gemfile更改为此,可以解决该问题而无需降级mysql2 gem版本:

gem 'rails', '4.2.6'

5

作为一个完整的初学者,我对如何执行此操作感到困惑,因此我只是进行了一次试用检查,最后使我的服务器正常工作,这就是我如何使其正常工作。

进入工作目录(“工作”)的文件,并从那里进入其中有mysql的2只装转到宝石文件(“Gemfile文件”)编辑您所创建的应用程序的文件(“sample_app”)创业板mysql2“创业板'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

还要确保不要将宝石放置在groupGemfile中的语句内。


+1助攻。但是我已经有了libmysqlclient-dev,而且gem不在group语句中。奇怪的是,它在我的其他项目上都能正常工作,而不仅仅是这个项目。同样,这不是我操作系统的新安装,我已经有一段时间没有在环境中进行任何更改了。登台服务器也是如此,在那里我也遇到了同样的问题。
newUserNameHere 2015年

1

有同样的问题,但添加source 'https://rubygems.org'到gem文件的顶部已解决了问题。

脚步:

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


0

试试这个:

bundle update mysql2

该命令会将您的“ mysql2” gem更新到最新版本(应为0.3.17或更高版本)并启动rails服务器。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.