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)
どうすれば修正できますか?
私はあなたと同じ問題を抱えていたか、少なくとも症状は同じでした。
背景:私は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
これらの指示に従うことで問題が解決しました。
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.
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が抽出されたディレクトリにスラッシュを使用していることに注意してください。
私はこのような問題がありました:
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を再インストールすると、問題が修正されました。
私はこの問題のまったく異なる原因を発見しました。私は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"
私の場合、Windowsでは、MySQL Server 5.5ディレクトリからRuby200/binにlibmysql.dllを誤ってコピーしました。正しいのは、mysql-connector-c-noinstall-6.0.2-win32からlibmysql.dllをコピーすることです。
既存の回答に追加します。 (特に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インストールとその下のlib
include
フォルダーだけです。その後、libmysql.dll
下 railsinstaller bin
フォルダー。
mysql2 gemを正常にインストールできなかった場合は、=> mysqlは古すぎるためです(Ruby気にする)。 Oracleから最新のmysqlを入手しますlib
include
libmysql.dll
それの下に。 データベースを実際にアップグレードする必要はありません。どこかに保存して、2つの必須コンポーネントを生成した後も引き続き使用できます
私の場合:私は非常に古いmysqlデータベースを使用しており、現時点ではアップグレードしたくありません。そのデータベースをバックアップし、後で復元しました