web-dev-qa-db-ja.com

間違ったmysqlクライアントライブラリ用にコンパイルされたmysql2 gem

My Railsアプリケーションを介してmysqlサーバーに接続しようとすると、次のエラーが表示されます

D:/Program_Files/Ruby192/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require': 
Incorrect MySQL client library version! This gem was compiled for 6.0.0 but the client library is 5.0.27. (RuntimeError)

どうすれば修正できますか?

63
Rahul

私はあなたと同じ問題を抱えていたか、少なくとも症状は同じでした。

背景:私はRails 3、mysql2 gem、およびWindowsマシンにローカルにインストールされたMySQLコミュニティサーバーバージョン5.5.21(32ビット)を使用していました。クライアントライブラリ(libmysql.dll)MySQLインストールからそれをmy Rubyインストールのbinフォルダーにコピーしました。

実行したときbundle exec rake db:create、私はあなたと同じエラーメッセージを受け取り、「ねえ、最新のMySQLリリースからクライアントライブラリを入手したとき、どうしてクライアントライブラリが古くなっているのでしょうか?」と考えました。

gem install mysql2。残念ながら、Bundlerでgemをインストールすると、Bundlerはメッセージを食べます。ここにあります:

=========================================================================
You've installed the binary version of mysql2. It was built using MySQL 
Connector/C version 6.0.2. It's recommended to use the exact same version
to avoid potential issues.

At the time of building this gem, the necessary DLL files where available
in the following download:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.Zip/from/pick

And put lib\libmysql.dll file in your Ruby bin directory, for example
C:\Ruby\bin

これらの指示に従うことで問題が解決しました。

参照リンク

85
antinome

Gemをアンインストールして再インストールすると、多くの場合、この問題は手動でファイルをダウンロードして移動する必要がなくなります。 Rails appディレクトリから:

> gem uninstall mysql2

You have requested to uninstall the gem:
    mysql2-0.3.11
database_cleaner-0.9.1 depends on [mysql2 (>= 0)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  Y
Successfully uninstalled mysql2-0.3.11

> bundle install

Fetching gem metadata from http://rubygems.org/......
Fetching gem metadata from http://rubygems.org/..
Using rake (0.9.2)
Using i18n (0.6.1)
... <SNIP> ...
Installing mysql2 (0.3.11) with native extensions
... <SNIP> ...
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
99
chrislopresto

64ビットバージョンのmysqlと32ビットバージョンのRubyを使用している場合は、このソリューションを http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64で確認してください-and-using-Ruby-with-it /

基本的に、mysql Webサイトから単一のコネクタをダウンロードし、ダウンロードしたコネクタを使用してmysqlまたはmysql2をコンパイルする必要があります。

for Ruby 1.9.2:

gem install mysql --platform=Ruby -- --with-mysql-dir=C:/mysql-connector-c-noinstall-6.0.2-win32

for Ruby 1.9.3:(mysql2バリアントを表示)

gem pristine mysql2 -- --with-mysql-config=C:\mysql-connector-c-noinstall-6.0.2-win32    

MySQL Connector/Cが抽出されたディレクトリにスラッシュを使用していることに注意してください。

9
user482594

私はこのような問題がありました:

Incorrect MySQL client library version! This gem was compiled for 5.5.29 but the client library is 5.6.17.

私にとっての問題は、マシンに5.5.29と5.6.17の両方のバージョンがインストールされていることでした。どうしたらいいかわかりません。バンドルすると、5.5.29バージョンが自動的に選択されました。それをアンインストールしてからgemを再インストールすると、問題が修正されました。

2
Victor Kmita

私はこの問題のまったく異なる原因を発見しました。私はmysql gemを使用していました。 mysql2 gemをビルドしましたが、database.ymlを更新するのを忘れていました。 mysql2 gemでは、次のように言う必要があります。

  development:
    adapter: mysql2

のではなく

  development:
    adapter: mysql

Gemはビルドされましたが、次にrakeを実行したときにエラーが発生しました。

一度見れば明らかですが、ここで説明したのと同じエラーメッセージが表示されます!

ところで、私のマシンでmysql2 gemをビルドするコマンドは、上記の説明よりも少し複雑でした。

gem install mysql2 -- --with-mysql-lib="c:\mysql-connector-c-noinstall-6.0.2-win32\lib"  --with-mysql-include="c:\mysql-connector-c-noinstall-6.0.2-win32\include" --with-mysql-dir="c:\mysql-connector-c-noinstall-6.0.2-win32"
1
user1208639

私の場合、Windowsでは、MySQL Server 5.5ディレクトリからRuby200/binにlibmysql.dllを誤ってコピーしました。正しいのは、mysql-connector-c-noinstall-6.0.2-win32からlibmysql.dllをコピーすることです。

1
user2315251

既存の回答に追加します。 (特にWindowsプラットフォーム)

Rubyはこの上に本当にひどいです。 Railsは実際にコネクタのバージョンやmysqlバージョンを気にするべきではありません。-しかし、それは私の意見です。

これを機能させるには、2つのことが必要です。 mysql2 gemおよびlibmysql.dllそして、バージョンに関してそれらを一致させる必要があります。 (これは私にとって混乱を引き起こしました。なぜなら、最新のコネクタは6.xであり、mysqlは5.xだけであるため、どのように一致させる必要がありますか

mysql2 gem。それをインストールするときは、コネクタを指定する必要があります。

     gem install mysql2 --platform=Ruby -- 
     --with-mysql-lib="d:\mysql\lib" --with-mysql-include="d:\mysql\include"

Oracleからダウンロードしたコネクタである必要はありません。必要なのはmysqlインストールとその下のlibincludeフォルダーだけです。その後、libmysql.dllrailsinstaller binフォルダー。

mysql2 gemを正常にインストールできなかった場合は、=> mysqlは古すぎるためです(Ruby気にする)。 Oracleから最新のmysqlを入手しますlibincludelibmysql.dll それの下に。 データベースを実際にアップグレードする必要はありません。どこかに保存して、2つの必須コンポーネントを生成した後も引き続き使用できます

私の場合:私は非常に古いmysqlデータベースを使用しており、現時点ではアップグレードしたくありません。そのデータベースをバックアップし、後で復元しました

1
zinking