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

时间:2015-09-08 12:18:35

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.1 mysql2 ruby-on-rails-4.2

在我的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存在问题,按照此bug report,它将在下一版本的rails 4.2.x中修复(在链接的评论中归功于dcorr)。< / p>

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

gem 'mysql2', '~> 0.3.18'

10 个答案:

答案 0 :(得分:67)

只需:

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

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

答案 1 :(得分:50)

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

第4条评论值得注意:

  

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

我能够将Rails 4.2.4绑定到4-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'

答案 2 :(得分:8)

这个特定问题的答案与发布时间和使用的Rails版本相关的问题是,问题是由bundle update和你的mysql2版本更新到0.4.x导致的,这是一个不兼容的问题最新的Rails ActiveRecord。

请再次注意,这不是使用旧版Rails / ActiveRecord的人的解决方案。

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

gem 'mysql2', '0.3.20'

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

答案 3 :(得分:7)

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

gem 'rails', '4.2.6'

答案 4 :(得分:6)

此问题已在此处解决: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

答案 5 :(得分:5)

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

进入工作目录的文件(&#34; work&#34;)并从那里进入你创建的应用程序的文件(&#34; sample_app&#34;),其中安装了mysql 2转到gem文件(&#34; Gemfile&#34;)将 gem&#39; mysql2&#39; 编辑为 gem&#39; mysql2&#39;,&#39;〜&gt; 0.3.18&#39;

现在返回cmd并运行命令&#34; bundle install&#34;。

因此编辑文件的目录应考虑括号中的上述文件。 &#34; C ^ \工作\ sample_app \的Gemfile&#34;

希望我有所帮助。

答案 6 :(得分:4)

当您在计算机上缺少某些mysql软件包时,通常会发生这种情况。你从gem install mysql2得到任何错误吗?你在做什么操作系统?

如果在debian或ubuntu上尝试sudo apt-get install libmysqlclient-dev

还要确保gem没有放在Gemfile中的group语句中。

答案 7 :(得分:1)

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

步骤:

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

答案 8 :(得分:0)

试试这个:

bundle update mysql2

这个命令会更新你的mysql2&#39; gem到最新版本(应该是0.3.17或更高版本)并启动你的rails服务器。

答案 9 :(得分:0)

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

试试这个。这将消除mysql2加载错误。