Rails 4-Gem: : LoadError: 为数据库适配器指定了‘ mysql2’,但是没有加载 Gem

在我的宝石档案里有:

gem 'mysql2'

我的 datase.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 的功劳)。

同时,你可以通过把 mysql2的版本降级到0.3.18来修复这个问题:

gem 'mysql2', '~> 0.3.18'
71567 次浏览

这通常发生在机器上缺少一些 mysql 包的情况下。你从 gem install mysql2得到任何错误吗?你在做什么操作系统?

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

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

这个特殊问题的答案与何时发布和使用的 Rails 版本有关,这个问题是由于执行 bundle update和将 mysql2版本更新到0.4. x 造成的,这个版本与最新的 Rails ActiveRecord 不兼容。

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

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

gem 'mysql2', '0.3.20'

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

只要做:

这个 gem 与 rails version 4.x.x一起工作

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

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

第四条意见值得注意:

这不是 mysql2的错误,而是 ActiveRecord 适配器: http://github.com/rails/rails/issues/21544。 这是固定在轨道主: 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'

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

进入工作目录文件(“ work”) ,然后进入你创建的应用程序文件(“ sample _ app”) ,它已经安装了 mysql 2。进入 gem file (“ Gemfile”)编辑 Gem‘ mysql2’Gem‘ mysql2’,’~ > 0.3.18’

现在回到 cmd 并运行命令“ bundle install”。

因此编辑文件的目录应考虑括号内的上述文件。 “ c work sample _ app Gemfile”

希望我能帮上忙。

有相同的问题,但增加 source 'https://rubygems.org'的 gem 文件顶部解决的问题。

步骤:

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

如果你能够升级你的 Rails 版本,那么改变你的 Gemfile 到这个版本,它将解决这个问题而不会降级 mysql2 gem 版本:

gem 'rails', '4.2.6'

试试这个:

bundle update mysql2

这个命令将把‘ mysql2’gem 更新到最新版本(应该是0.3.17或更高版本) ,并启动您的 Rails 服务器。

这个问题在这里得到了解决: 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

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

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