2011-03-27 132 views
21

我剛剛編譯了ruby,並安裝了rubygems,mysql2和rails,這些工作相當不錯。但我得到以下錯誤消息,每當我試圖啓動Rails服務器:Ruby:mysql2-Gem無法正常工作(Mac OS X Snow Leopard,Ruby 1.9.2)

 
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require': dlopen(/usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib (LoadError) 
    Referenced from: /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    Reason: image not found - /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:68:in `block (2 levels) in require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `each' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:66:in `block in require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `each' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler/runtime.rb:55:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/bundler-1.0.10/lib/bundler.rb:120:in `require' 
    from /Users/filzo/Documents/rails/blog/config/application.rb:7:in `' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `require' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:28:in `block in ' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `tap' 
    from /usr/local/ruby/lib/ruby/gems/1.9.1/gems/railties-3.0.5/lib/rails/commands.rb:27:in `' 
    from script/rails:6:in `require' 
    from script/rails:6:in `' 

我試了幾個可能的解決方案(例如此:http://railsforum.com/viewtopic.php?pid=23125#23125與libmysqlclient.18.dylib);但沒有爲我工作。我希望你能幫助我。

編輯: 看起來這固定我的問題:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/ruby/lib/ruby/gems/1.9.1/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

無論如何;這是MySQL或Ruby代碼中的錯誤嗎?

+0

您的修補程序也適用於我。我必須將'1.9.1'更改爲'1.8',而我的Ruby副本安裝在根庫中,而不是本地的,但它的工作。活泉! – ericso 2011-03-28 19:08:23

+0

你使用什麼mysql版本? – 2011-04-03 16:08:03

回答

12

如果您在Mac OS X上使用RVM(一個很好的選擇) - 這是最終爲我工作的魔法命令。

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Users/*USERNAME*/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

更換USERNAME在適當的語法根據您的當前設置。 如果你的mysql版本的gem是不同的,那麼也是如此。

+2

它打印'install_name_tool:無法打開文件:/Users/my_name/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle(沒有這樣的文件或目錄)' – Kir 2011-06-02 14:24:39

+0

我得到同樣的東西 – Francois 2012-03-14 09:49:57

+0

'install_name_tool'似乎是XCode /命令行開發者工具的一部分。這個命令更便攜的版本是: 'sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib \'bundle show mysql2 \'/ lib/mysql2/mysql2 .bundle' – iloveitaly 2012-04-18 19:52:35

32

一個簡單而最好的辦法就是通過命令來創建軟鏈接 -

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

http://rorguide.blogspot.com/2011/07/getting-error-library-not-loaded.html

+1

爲我工作。謝謝。 – RSG 2011-11-17 21:53:50

+0

神奇的隊長。嘗試這個後,我不能再登錄到MySQL。繼續訪問被拒絕的錯誤... – o01 2011-12-12 14:11:42

+0

對我很好用 – pablo 2012-01-06 23:02:11

3

儘量讓這個符號鏈接,因此耙可以找到正確的MySQL客戶端庫。

ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

2

我不知道這是否會幫助或沒有,但我使用OS X 10.7.1獅子。在我的情況下,我打開了一個終端窗口,進入/Library/Ruby/Gems/1.8/gems/mysql2-0.3.7,並且一旦我做了RVM就說它遇到了一個新的或修改過的.rvmrc文件。該文件的內容是:

rvm use [email protected] --create 

它問我是否想要信任這個.rvmc文件。我說是的,它返回以下:

Using /Users/dan/.rvm/gems/ruby-1.9.2-p290 with gemset mysql2 

一旦做了,我跑以下命令:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.7/lib/mysql2/mysql2.bundle 

一旦我做到了,我被訂走。希望這可以幫助!

4

install_name工具的更好替代方法是將mysql lib的路徑添加到DYLD_LIBRARY_PATH環境變量中。在/ etc/profile文件:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib 

或者,因爲我有Oracle即時客戶端裝好,這樣做:

export ORACLE_HOME="/usr/local/oracle/instantclient_10_2" 
export DYLD_LIBRARY_PATH=$ORACLE_HOME 
export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/mysql/lib 
14

這似乎是一個已知的bug in the MySQL binary distribution(和不固定的!)。

雖然在你的mysql2.bundle文件上運行install_name_tool可以工作,但如果你刪除並重建它們,你又回到了原點。此外,您必須將此修補程序應用於與其鏈接的其他任何內容。一個更好的解決方法是修復在庫本身的問題:

$ sudo install_name_tool -id \ 
    /usr/local/mysql/lib/libmysqlclient.18.dylib \ 
    /usr/local/mysql-5.5.12-osx10.6-x86_64/lib/libmysqlclient.18.dylib 

拆除和重建mysql2寶石:

$ gem uninstall mysql2 
$ gem install mysql2 

...會拿起變化到庫中,一切都沒有問題正確,而不必修改任何環境變量。

+0

謝謝,這對我最合適!希望mysql二進制發行版能夠得到修復。 – 2012-02-25 14:53:51

相關問題