38

Rails サーバーを起動すると、次のエラーが表示されます。

$ rails server
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require':     dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError) 
Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle
Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-    
0.2.6/lib/mysql2/mysql2.bundle

rvm use ruby​​-1.9.2-p0 コマンドの後に、次のコマンドで mysql2 をインストールしました。

$ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config
Building native extensions.  This could take a while...
Successfully installed mysql2-0.2.6
1 gem installed
Installing ri documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Client not known
Installing RDoc documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Client not known

Gemfile と database.yml ファイルに mysql2 があり、バンドルのインストールは正常に完了します

$ bundle show mysql2
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6

Railsサーバーのエラーは、OSX上のmysql_configの場所がわからないことが原因であることは理解していますが、gemのインストール時に正しい場所を指定しました。しかし、RVM の gem は mysql_config の場所を尊重していないようです。

誰にもこれに対する解決策がありますか?

4

9 に答える 9

64

この問題は、MySQL の動的ライブラリが欠落している mysql2 gem に起因します。

MySQL ライブラリを追加するinstall_name_tool ...ために更新する必要があるよりもクリーンなソリューションです。DYLD_LIBRARY_PATHこれを行うには、更新~/.bash_profileして MySQL ライブラリ フォルダーを追加します。

export DYLD_LIBRARY_PATH="/usr/local/mysql/lib:$DYLD_LIBRARY_PATH"

注: インストールに基づいて MySQL の場所を更新することをお勧めします。

これにより、物事がきれいに保たれるだけでなく、MySQL 動的ライブラリを必要とするすべての gem またはコードが確実にそれらを見つけられるようになります。

参考: http: //lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

リファレンス更新 2012 年 7 月: OS X 10.8 の変更により、上記の簡単な方法が洗練されていません。その変数を設定すると、setuid または setgid プログラムを実行するたびに、stderr で次の警告が表示されます。

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid

Phusion Passenger Standalone を使用している Ruby 開発者は、このメッセージが 5 秒ごとにコンソールに表示されます。それは本当にいらいらし、非常に速くなります。

Apple にバグを報告しました。OpenRadar にもあります。

それまでの間、DYLD_LIBRARY_PATH の設定 (この 10.8 の問題を回避) や install_name_tool を使用した .bundle ファイルのハッキングを必要としない、クライアント ライブラリ パスの問題を修正する 3 つ目の方法もあります。

$ brew install mysql
于 2011-04-01T05:59:17.777 に答える
22

私はここで答えを見つけました:Mysql 5.5、ユキヒョウとレール

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
于 2010-12-25T16:43:32.987 に答える
8

OS X 10.8 (Mountain Lion) では、回答とコメントに記載されているように、リストされている回答にはすべて問題があります。

  • /usr/local/mysql/lib を含めるように設定DYLD_LIBRARY_PATHすると、OS X および brew から警告が表示されます
  • install_name_toolgem がインストールまたはアップグレードされるたびに、gem バイナリが見える場所をハックするために使用する必要があります。
  • brewの mysqlへの切り替えが機能しない場合があります。いずれにせよ、すでに動作しているインストールを再構成したくありません

私見のよりシンプルで堅牢な解決策は、ライブラリへのリンクをデフォルトの動的ライブラリ検索パスに配置することです/usr/local/lib。あれは:

ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib
于 2013-01-24T12:00:55.307 に答える
5

明細書、

フレデリックの答えはこの問題を解決しますが、バージョンやシステムでの名前の付け方によっては、コマンドの一部の項目を変更する必要がある場合があります。

たとえば、mysql の最新バージョンでは、libmysqlclient.16.dylib は実際には libmysqlclient.18.dylib です。次のことを試してください:

locate libmysqlclient.18.dylib

それでもパスが返されない場合は、次の場所に移動できます。

/usr/local/{your-mysql}/lib

をクリックしてファイルを見つけます。次に、コマンドの正しいディレクトリを見つけるための PWD だけです。

また、インストールした ruby​​ の実際のパッケージ名が何であるかを確認する必要があります。これを使用して見つけることができます

rvm info 

たとえば、私の 1.9.2 のインストールは ruby​​-1.9.2.p0 ではなく、ruby-1.9.2.p180 です。これは Frederics コマンドでも変更する必要があります。

したがって、私にとって Frederic のコマンドは、それぞれ 1.8.7 と 1.9.2 の rvm ruby​​ を修正するためのものになりました。

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
于 2011-03-27T20:07:06.283 に答える
3

以下経由: http: //lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

2012 年 7 月の更新:

OS X 10.8 の変更により、上記の簡単な方法は洗練されていません。その変数を設定すると、setuid または setgid プログラムを実行するたびに、stderr で次の警告が表示されます。

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid

Phusion Passenger Standalone を使用している Ruby 開発者は、このメッセージが 5 秒ごとにコンソールに表示されます。それは本当にいらいらし、非常に速くなります。

Apple にバグを報告しました。OpenRadar にもあります。

それまでの間、DYLD_LIBRARY_PATH の設定 (この 10.8 の問題を回避) や install_name_tool を使用した .bundle ファイルのハッキングを必要としない、クライアント ライブラリ パスの問題を修正する 3 つ目の方法もあります。

$ brew install mysql
于 2012-11-03T20:02:31.170 に答える
2

私はしばらくこれに固執し、別の解決策にたどり着きました。

不足しているライブラリのバージョンが 16であることに注意してください。

ライブラリがロードされていません: libmysqlclient.16.dylib (LoadError)

私はそのライブラリのバージョン20を持っていたことが判明しました -libmysqlclient.20.dylib

私は自分のGemfileに正しく持っていgem 'mysql2'ましたが、私がする必要があったのは、gemをアンインストールしgem uninstall mysql(gemの複数のバージョンがインストールされていました)、次にこのライブラリに必要なバージョンだけbundle installを取得するために新しいことをすることでした.

その後、そのライブラリの正しいバージョンを探して見つけました。

于 2016-05-16T23:32:31.993 に答える
1

私は別の場所にあり、使用する必要がありました:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle.
于 2012-01-27T00:14:31.510 に答える
0

これが私がしていることです(他の人に似ています)

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
于 2011-12-12T04:36:39.963 に答える