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 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).
.....

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 Gemが取得する最新バージョンであり、すでにインストールされています。
newUserNameHere

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

回答:


50

ただ更なる更新-問題の解決策は正しいです。

4番目のコメントは、以下の点に注意する価値があります。

これは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'

速度が優先される場合、レールに「4.2.4」をピン留めして「4-2-stable」にする代わりに、mysql2を「0.3.20」に下げる方が少し高速でした。
seanriordan08

それはmysqlの宝石は、PostgreSQL T__Tに比較して非常に多くのけちバギーの問題を持っていることを信じるのは難しい
newBike

これはWindows環境です。Imagemagickなどと同じです。外部依存関係を使用する必要があります。Windowsには中央リポジトリがないため、トリッキーになります
Richard Peck

Rails 5はどうですか?
Richard Peck 2017


67

ただやる:

gem 'mysql2', '~> 0.3.18' この宝石は rails version 4.x.x

インストールするgem 'mysql2', '~> 0.4.0'と、gem読み込みエラーが発生し、互換性の問題が発生します


クリーン、シンプル、そして簡潔。ありがとう!
Am33d 2018

私のために働いた@kaleem
khalidh

9

この問題はここで対処されました: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を使用しています


8

投稿された時期と使用されているRailsのバージョンに関するこの特定の質問への回答は、問題はbundle update、最新のRails ActiveRecordとの非互換性の問題があるmysql2バージョンを0.4.xに更新することによって引き起こされるというものです。

繰り返しますが、これは古いバージョンのRails / ActiveRecordを使用している人のためのソリューションではないことに注意してください。

簡単な解決策はmysql2、gemfileで次のようにバージョンを指定するだけです。

gem 'mysql2', '0.3.20'

長い解決策は、ActiveRecordの更新またはmysql2の何かが変更されるのを待つことです。


7

Railsのバージョンをアップグレードできる場合は、Gemfileをこれに変更すると、mysql2 gemのバージョンをダウングレードせずに問題が解決します。

gem 'rails', '4.2.6'

5

完全な初心者として、これを行う方法について混乱しましたので、試用チェックを行い、最終的にサーバーを動作させました。これが動作させる方法です。

作業ディレクトリ( "work")のファイルに移動し、そこからmysql 2がインストールされている作成したアプリ( "sample_app")のファイルに移動します。gemファイルに移動します( "Gemfile")gem 'mysql2'gemに編集します。「mysql2」、「〜> 0.3.18」

cmdに戻って、コマンド「bundle install」を実行します。

したがって、上記のファイルを括弧内に考慮したファイルを編集するディレクトリは、である必要があります。「c \ work \ sample_app \ Gemfile」

私はいくつかの助けになったと思います。


4

これは通常、マシンに一部のmysqlパッケージがない場合に発生します。エラーは発生しgem install mysql2ますか?どのOSに取り組んでいますか?

debianまたはubuntuの場合は、を試してくださいsudo apt-get install libmysqlclient-dev

また、gemがgroupGemfileのステートメント内に配置されていないことを確認してください。


+1アシスト。しかし、私はすでにlibmysqlclient-devを持っており、gemはgroupステートメント内にありません。奇妙なのは、これが他のプロジェクトでも問題なく機能することです。また、これは私のOSの新規インストールではありません。しばらくの間、環境内で何も変更していません。同じことがステージングサーバーにも当てはまります。ステージングサーバーでも同じ問題が発生しています。
newUserNameHere

1

同じ問題がありましたがsource 'https://rubygems.org'、gemファイルの先頭に追加すると問題が解決しました。

手順:

source 'https://rubygems.org'gemファイルに追加します。コメントアウトmysql2 gemgem 'mysql2', '~> 0.3.18' 実行を追加bundle install


0

これを試して:

bundle update mysql2

このコマンドは 'mysql2' gemを最新バージョン(0.3.17以上にする必要があります)に更新し、railsサーバーを起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.