Perpustakaan tidak dimuat: kesalahan libmysqlclient.16.dylib ketika mencoba menjalankan 'rails server' pada OS X 10.6 dengan permata mysql2

206

Saya telah berjuang dengan ini selama beberapa waktu.

Saya telah menginstal Rails 3, gem, mysql pada mesin Snow Leopard saya. Semua berjalan dengan baik sampai saya membuat proyek pertama saya dan mencoba menjalankannya

rails server

Saat menjalankan ini saya mendapatkan:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

Sejauh yang saya tahu masalahnya adalah dengan permata mysql2. MySQL tampaknya berjalan dengan baik dan referensi Gemfile saya mysql2, file database.yml saya juga tampak ok.

Kesalahan menyebutkan

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Dan lagi

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle ada di sana !?

Jika saya menggunakan permata mysql lama, WEBrick melakukan booting dengan baik. Tapi itu tidak ideal, kan?

Saya sudah mencoba semua yang bisa diberikan Google kepada saya! Setiap bantuan sangat dihargai.

Jonty Brook
sumber

Jawaban:

393

Saya tidak pernah bisa mendapatkan jawaban ini bekerja untuk saya, tetapi ini adalah perintah yang saya gunakan untuk membuatnya bekerja untuk saya. Dengan cara ini Anda tidak perlu menggunakan install_name_tool setiap kali Anda memperbarui mysql Anda

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
tanpa bunga
sumber
11
Itu adalah cara paling sederhana dan tepat untuk menyelesaikan masalah itu.
Voldy
2
Terima kasih untuk ini. jawaban yang ditandai di atas hanya berfungsi untuk satu situs, tetapi ini berfungsi secara permanen. Ini betta.
Gratis
12
Bagi mereka yang ingin tahu apa yang terjadi, perintah ini membuat tautan simbolis dari lokasi kedua ke yang pertama. Ketika permata mencari pustaka klien MySQL di bawah /usr/lib, tautan itu akan memutuskan ke lokasi di mana itu sebenarnya diinstal. Pada OS X, biasanya ada di bawah /usr/local/mysql/lib, di mana perintah ini terhubung. Jika lib Anda dipasang di lokasi yang berbeda, Anda harus mengubah perintah ini. Ketik locate libmysqlclient.18.dylibdan gantikan hasilnya dengan argumen pertama setelahnya -s.
Siobhán
1
@Sean D., ketika saya menjalankan cari libmysqlclient.18.dylib saya mendapatkan output ini WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.apa yang salah?
GiH
1
@GiH Anda hanya perlu menjalankan perintah yang diperintahkan ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Itu akan memulai proses pengindeksan hard drive Anda, yang akan membuat locateperintah bekerja di masa depan. Dalam kebanyakan kasus, meskipun, saya pikir Anda tidak perlu melakukan itu, dan hanya dapat menggunakan perintah yang disediakan luvls apa adanya.
Siobhan
93

Saya telah menyelesaikan ini, akhirnya!

Saya menginstal ulang Ruby dan Rails di bawah RVM. Saya menggunakan Ruby versi 1.9.2-p136.

Setelah menginstal ulang di bawah rvm, kesalahan ini masih ada.

Pada akhirnya perintah ajaib yang menyelesaikannya adalah:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Semoga ini bisa membantu orang lain!

Jonty Brook
sumber
1
Ini entah bagaimana telah mengatur ulang hak mysql dan sekarang saya tidak dapat masuk ... bahkan setelah melakukan pengaturan ulang kata sandi menggunakan file seperti yang dijelaskan dalam dokumen mysql.
Coderama
2
Terima kasih, ini berhasil untuk saya. Dan untuk orang lain dengan masalah yang sama, jika Anda menggunakan rvm maka lewati sudo, jika tidak izin mungkin akan berubah.
DanneManne
2
Perintah ajaib berfungsi bahkan jika Anda tidak menggunakan RVM - cukup ubah argumen terakhir untuk menunjuk ke tempat mysql2-0.2.6/lib/mysql2/mysql2.bundledi mana permata Anda dipasang.
Tobias Cohen
2
Terima kasih banyak. Bagaimana Anda mengetahui hal ini?
Derek
7
Terima kasih! Saya membutuhkan perintah yang sedikit berbeda untuk Mac OS X Lion saya yang menjalankan RVM 1.6.4 dengan Ruby 1.9.2-p180, permata mysql2 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Randy Eppinger
40

Bagi saya ini hanya karena saya telah meningkatkan mysql tetapi belum memperbarui permata mysql2 - instal ulang permata akan memperbaikinya ...

gem pristine mysql2

Luke
sumber
Ini harus menjadi jawaban yang dipilih.
El Guapo
26

Saya memiliki masalah yang sama. Sepertinya tidak dapat menemukan perpustakaan libmysqlclient. Perbaikan sementara yang berhasil bagi saya adalah sebagai berikut:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

Saya tidak yakin di mana konfigurasi menentukan path load atau apa itu diatur tetapi instalasi mysql saya tampaknya tidak ada di dalamnya. Saya akan memposting lagi jika saya menemukan solusi yang lebih permanen.

Sunting: Sebenarnya perbaikan ini muncul untuk mengatasi masalah dengan lebih akurat.

Ogapo
sumber
24

Tambahkan di bawah ini ke ~/.bash_profile:

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

Ini berhasil untuk saya

DV Dasari
sumber
Yap, bekerja pada 1.9.3-p448. Malu bahwa itu bukan jawaban yang diterima.
andreimarinescu
17

Di pembaruan OSX El Capitan saat Anda melakukan ini:

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

itu melempar kesalahan seperti

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Jadi untuk menghindari ini, apa yang dapat Anda lakukan adalah mencari terlebih dahulu libmysqlclient.18.dylibmenggunakan perintah

User$ locate libmysqlclient.18.dylib

Dalam kasus saya itu kembali /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Jadi alih-alih usr/lib/kami akan membuat symlink usr/local/lib/seperti ini:

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

Lebih detail: https://forums.developer.apple.com/thread/7935

Sony Mathew
sumber
1
Pada El Capitan bagi saya semua yang diperlukan adalah Anda baris terakhir:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin
Senang itu membantu seseorang. : D
Sony Mathew
Ini adalah jawaban yang BENAR untuk elcapitan tautan target Anda seharusnya ada di /usr/local/libfolder
Arnold Roa
13

baris berikut ini cocok untuk saya. Saya menggunakan mac 10.7.2.

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

S. Rasel
sumber
1
Yang ini yang memperbaiki masalah saya. Terima kasih!
Justin Bozonier
11

Baru saja mengalami masalah ini. Yang harus saya lakukan adalah menghapus permata mysql2 dan menginstalnya kembali. Semoga ini berhasil untuk orang lain

Anh Pham
sumber
1
Di mesin saya, menjalankan Mavericks, saya menghapus semua versi permata mysql2 dengan permata uninstall mysql2 dan menjawab All versionsdi prompt. Saya kemudian menjalankan pembuatan upgrade mysql dan kemudian instal mysql2.
Martin Streicher
4

Beginilah cara kerjanya untuk saya:

Saya menjalankan perintah di bawah ini
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / permata / ruby-1.9.2-p180 / permata / mysql2-0.2.7 /lib/mysql2/mysql2.bundle

Lingkungan saya:
$ rails -v Rails 3.0.6

$ mysql --version
mysql Ver 14.14 Distrib 5.5.11, untuk osx10.6 (i386) menggunakan readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (2011-02-18 revisi 30909) [x86_64-darwin10.7.0]

Semoga ini bisa membantu seseorang.

DV Dasari
sumber
3

Terima kasih, Ogapo! Mengekspor alias itu bekerja untuk saya, dan kemudian saya mengikuti tautannya, dan dalam kasus saya mysql2.bundle sudah ada di /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle jadi Saya menyesuaikan install_name_tool untuk memodifikasi bundel itu daripada satu di ~ / .rvm dan mendapatkan cara kerjanya yang seharusnya dilakukan.

Jadi sekarang:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
tobinjim
sumber
3

hai itu berhasil untuk saya dari tautan yang disarankan dari Fredy Andersen

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

hanya harus mengubah ke versi mysql saya, dalam perintah, terima kasih

manuelBetancurt
sumber
3

Saya memecahkan masalah ini dengan menghapus gemset saya untuk proyek saya saat ini dan membuatnya kembali dan menginstal ulang paket bundel. Saya rasa saya menyebabkannya dengan menginstal versi mysql yang lebih baru.

Ryan
sumber
3

Saya mempunyai masalah ini ketika bekerja dengan Django, saya gunakan brewuntuk menginstal banyak program Open Source saya dan saya perlu melakukan hal berikut sejak saya dulu brewmenginstal mysql:

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

Pastikan untuk mengganti dengan versi perpustakaan Anda!

Addiction2Code
sumber
3

bundle install mysql --forcemembantuku. Itu menginstal ulang dependensi yang hilang sebagai akibat dari brew uninstall mysql.

Aram
sumber
Unknown switches '--force'
Arnold Roa
2

Jonty, aku juga berjuang dengan ini.

Saya pikir ada petunjuk di sini:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

Perhatikan jalan menuju dylib itu, eh, agak pendek?

Saya mencoba mencari tahu di mana instruksi pemasangan permata meninggalkan jalur dylib, tetapi lambat karena saya belum pernah membuat permata sendiri.

Saya akan memposting lebih banyak jika saya menemukan lebih banyak!

tobinjim
sumber
2

Saya punya masalah yang sama persis beberapa hari yang lalu. Saya akhirnya berhasil menyelesaikannya. Saya tidak begitu yakin bagaimana, tetapi saya akan memberi tahu Anda apa yang saya lakukan. Mungkin itu akan membantu Anda.

Saya mulai dengan mengunduh RVM. Jika Anda belum menggunakannya, saya sangat merekomendasikan melakukannya. Ini pada dasarnya menciptakan kotak pasir untuk instalasi terpisah baru dari Ruby, RoR dan RubyGems. Bahkan, Anda dapat memiliki beberapa instalasi secara bersamaan dan langsung beralih ke yang lain. Itu bekerja seperti pesona.

Mengapa ini berguna? Karena Anda tidak boleh main-main dengan instalasi Ruby default di OS X. Sistem tergantung padanya. Yang terbaik adalah membiarkan instalasi Ruby dan RoR default saja dan membuat yang baru menggunakan RVM yang dapat Anda gunakan untuk pengembangan Anda sendiri.

Setelah saya membuat instalasi Ruby terpisah, saya baru saja menginstal RoR, RubyGems dan mysql, dan itu berhasil. Untuk langkah-langkah tepat yang saya ambil, lihat pertanyaan saya: Menginstal Rails, MySQL, dll. Semuanya salah

Sekali lagi: Saya tidak tahu pasti ini akan menyelesaikan masalah Anda. Tapi itu tentu saja trik untuk saya, dan dalam hal apapun menggunakan RVM sangat dianjurkan.

Rits
sumber
2

Saya masih menemukan bahwa dengan solusi di atas, tidak berfungsi (misalnya) dengan plugin Rails untuk TextMate. Saya mendapat kesalahan serupa (saat mengambil skema basis data).

Jadi yang dilakukan adalah, buka terminal:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Ganti mysql-5.5.8-osx10.6-x86_64 dengan jalur Anda sendiri (atau mysql).

Ini membuat tautan simbol ke lib, sekarang rel berjalan dari baris perintah, dan juga plugin TextMate seperti ruby-on-rails-tmbundle .

Untuk menjadi jelas: ini juga memperbaiki kesalahan yang Anda dapatkan saat memulai rails server.

Roger
sumber
2

Ini biasanya terjadi ketika Anda meningkatkan mysql. Permata mysql2 yang terinstal yang dibangun di atas lib mysql lama tidak dapat bekerja dengan lib baru. Hanya perlu menginstalnya kembali.

Hapus instalan mysql2 dengan gem uninstall mysql2. Kemudian instal dengangem install mysql2

longkt90
sumber
1

Saya telah mengatasinya dengan membuat file .rvmrc di folder proyek saya yang terdiri dari:

rvm use <yourrubie>

kemudian memasuki jalur proyek saya

cd ~/myprojectpath

lalu aku lari

bundle install
Tomasz Mazur
sumber
1

Versi perintah luvlss saya:

Mac OSX 10.10.5

MySQL 5.6.27

Penumpang 5.0.21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Jika Anda mencoba banyak tautan berbeda, seperti yang saya lakukan, lakukan pembersihan dengan:

sudo unlink /usr/lib/libmysqlclient.18.dylib

AlexJ
sumber
1

Buka Terminal dan jalankan yang berikut:

export PATH=$PATH:/usr/local/mysql/bin

Itu harus bekerja.

Slipstream
sumber
1
Ini berhasil, terima kasih !!! Saya mengalami kesulitan menjalankan Django pada Visual Studio Code. Terus mendapatkan kesalahan apakah saya menginstal mysqlclient di virtualenv.
Irshu
0

Jika Anda menggunakan OSX dan menginstal mysql menggunakan brew, Anda dapat:

brew link mysql

Jika Anda mengalami masalah dengan versi (saya menjalankan mysql 5.7 sementara permata saya diperlukan 5.6.25), Anda dapat

brew unlink mysql
brew switch mysql 5.6.25
Ariel Cabib
sumber
0

Bagi saya, saya harus menghapus instalan mysql secara manual

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
Dillawes0me
sumber