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が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の場所を考慮していないようです。
誰かがこれに対する解決策を持っていますか?
この問題は、mysql2 gemにMySQLの動的ライブラリがないために発生します。
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
私はここで答えを見つけました: Mysql 5.5、Snow leopard and Rails
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
OS X 10.8(Mountain Lion)では、回答とコメントに記載されているように、リストされている回答にはすべて問題があります。
DYLD_LIBRARY_PATH
を設定すると、OS Xおよびbrewから警告が出されますinstall_name_tool
を使用して、gemバイナリが見える場所をハックするには、gemがインストールまたはアップグレードされるたびにやり直す必要があります。brew
のmysqlに切り替えると、mysqlが機能しない場合があります。とにかく、すでに機能しているインストールを再構成したくないよりシンプルで堅牢なソリューションIMHOは、/usr/local/lib
が含まれているデフォルトの動的ライブラリ検索パスにライブラリへのリンクを配置することです。あれは:
ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib
ビル、
フレデリックの答えはこの問題を解決しますが、バージョンやシステムでの命名方法によっては、コマンドの一部の項目を変更する必要がある場合があります。
たとえば、mysqlの最新バージョンでは、libmysqlclient.16.dylibは実際にはlibmysqlclient.18.dylibです。やってみてください:
locate libmysqlclient.18.dylib
それがパスを返さない場合、あなたは行くことができます:
/usr/local/{your-mysql}/lib
ファイルを検索します。次に、PWDだけでコマンドの正しいディレクトリを見つけます。
また、インストールしたルビーの実際のパッケージ名を確認する必要があります。あなたはこれを見つけることができます
rvm info
たとえば、私のインストールする1.9.2はRuby-1.9.2p0ではなくRuby-1.9.2.p180です。これはFredericsコマンドでも変更する必要があります。
それで、私にとって、フレデリックのコマンドは、それぞれ1.8.7と1.9.2のRVMルビーを修正するためになりました:
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
以下を介して: 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
鉱山は別の場所にあり、私は使用する必要がありました:
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.
私はしばらくこれにこだわっていて、別の解決策を見つけました。
不足しているライブラリがバージョン16であることに注意してください:
ライブラリがロードされていません:libmysqlclient.16.dylib(LoadError)
そのライブラリのバージョン20があったことがわかりました-libmysqlclient.20.dylib
私は正しくgem 'mysql2'
はGemfileにありますが、必要なのはgemをアンインストールすることでしたgem uninstall mysql
(私はgemの複数のバージョンをインストールしていました)そして新しいbundle install
このライブラリに必要なバージョンを取得するちょうど。
その後、そのlibの正しいバージョンを探して見つけました。
Mysqlを最新バージョンにアップグレードし、mysql2 gemを再インストールするとbrew upgrade mysql
gem uninstall mysql2
gem install mysql2
ところで、MySQLのバージョンは5.7.18、mysql2 gemのバージョンは0.4.5です。
これが私がやっていることです(他の人と同じです)
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