rails + MySQL di OSX: Library tidak dimuat: libmysqlclient.18.dylib

119

Saya baru mulai dengan Ruby (dan rel). Saya melakukan pengaturan sesuai dengan http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, menggunakan rvm. Saya memiliki semuanya bekerja dengan baik dengan sqlite.

Sekarang saya ingin mencoba mengubah banyak hal ke MySQL, karena itulah yang saya lakukan sebagian besar pengembangan saya. Di Gemfile saya, saya telah mengganti sqlite dengan mysql2:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

Tetapi ketika saya mencoba membuat DB untuk rel di MySQL saya mendapatkan:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

Saya telah melihat posting lain yang merekomendasikan menginstal ulang MySQL melalui homebrew (milik saya diinstal melalui DMG yang dapat diunduh), tetapi saya lebih memilih untuk tidak melakukannya karena saya sudah memiliki beberapa database lain di sana untuk proyek non-ruby lainnya.

Saya sebenarnya memiliki file yang dicari Rails; itu dipasang di /usr/local/mysql/lib/libmysqlclient.18.dylib. Apa cara terbaik untuk memberi tahu Rails cara menemukannya?

George Armhold
sumber
Mungkinkah ini duplikat dari ini? stackoverflow.com/questions/4546698/…
gmile
Memang. Saya tidak dapat menghapus pertanyaan saya sendiri? Dipilih untuk ditutup sebagai dup.
George Armhold

Jawaban:

313

Solusinya cukup mudah; Tambahkan jalur perpustakaan di file ~ / .bash_profile atau ~ / .profile Anda:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Jika masih tidak berfungsi (ini berfungsi untuk saya):

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

Ada banyak blog dengan install_name_tool, yang tidak akan berfungsi untuk saya karena saya menggunakan OSX Lion:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search
atejeda
sumber
16
Symlink berfungsi untuk saya (setelah meningkatkan ke Mountain Lion). Terima kasih!
siannopollo
5
Symlink melakukannya, terutama untuk kasus seperti menjalankan rel dari bawah RubyMine di mana .bash_profiletidak benar-benar berlaku.
maksimov
2
Saya menambahkan DYLD_LIBRARY_PATH Anda ke .bash_profile, tetapi saya juga harus mencopot pemasangan permata 'mysql2' lalu menginstalnya kembali. seperti: 'gem uninstall mysql2 && gem install mysql2'
brendan
73
Bagi mereka yang datang ke sini untuk 10.11 Anda tidak dapat melakukan symlink usr/liblagi tetapi symlink ke usr/local/libakan berfungsi:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons
2
@JonathanSimmons - Anda baru saja menyelamatkan saya dari mencabut sisa rambut saya. Jawaban symlink asli tidak berfungsi di OS X 10.11.5, Anda hanya berakhir dengan kesalahan "ln: /usr/lib/libmysqlclient.18.dylib: Operasi tidak diizinkan" - Semuanya berfungsi sekarang dan saya akhirnya dapat memulai bekerja untuk hari ini ... Terima kasih!
Colin Adams
125

Di El Capitan saya punya ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Di El Capitan /usr/lib/sekarang memiliki bendera terbatas dan tidak dapat ditulis tanpa menonaktifkan keamanan jadi saya hanya memasukkan tautannya /usr/local/libsaja.

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

Server Rails berfungsi dengan baik lagi.

TinMonkey
sumber
2
Tidak membutuhkan semua jawaban Alex. Satu tautan simbolis berhasil.
gitb
Saya melakukan ini dan mendapatkan: "terhubung ': Tidak dapat terhubung ke server MySQL lokal melalui soket' /tmp/mysql.sock '(2) (Mysql2 :: Error)"
Josh Hunter
1
@JoshHunter Saya yakin ini adalah masalah yang terpisah. Ada utas di sini stackoverflow.com/questions/18449050/… bisa juga karena server MySQL tidak berjalan.
TinMonkey
ya, server tidak berjalan ... ini memperbaikinya. sudo /usr/local/mysql/support-files/mysql.server mulai
Josh Hunter
62

Sementara judul pertanyaan ini menjelaskan dengan tepat masalah yang saya hadapi, situasinya berbeda dari yang dijelaskan dalam jawaban sebelumnya, begitu pula solusinya.

Dalam kasus saya (El Capitan, mysql diinstal melalui homebrew), brew update && brew upgrademenyebabkan paket mysql ditingkatkan ke 5.7.10 (dari 5.6.x).

Peningkatan tersebut menyebabkan libmysqlclient.18.dylibdiganti dengan libmysqlclient.20.dylib, tetapi mysql2permata itu masih mengandalkan yang pertama.

Untuk memperbaiki masalah yang saya lakukan: gem uninstall mysql2 && gem install mysql2

Harap dicatat bahwa masalah serupa dapat terjadi dengan perpustakaan yang dikelola homebrew berbeda ( lihat jawaban saya sendiri untuk ini, misalnya )

Giuseppe
sumber
Bagus ! Saya mengupgrade mysql saya ke 5.7 ... menghadapi masalah ini ..... melakukan langkah-langkah berikut 1. gem uninstall mysql2> opsi yang dipilih 3 2. gem install mysql2 3. menambahkan ini ke gemfile proyek ---> gem 'mysql2' , '~> 0.3.21' 4. pemasangan bundel
Udit Kapahi
10
Saya sarankan semua orang mencoba ini dulu! Jika berhasil, Anda dapat menghindari sampah sistem Anda dengan solusi lainnya. Terkadang Anda harus bergantung pada symlink magis, dll, tetapi itu membuat sistem Anda semakin rapuh. (Jika tidak berhasil, tidak ada kerusakan yang dilakukan dan tidak ada yang dapat dibatalkan.)
Tom Wilson
Bekerja untuk saya juga. Masalahnya adalah saya pindah dari menginstal mysql w / homebrew ke penginstal resmi.
xenetika
1
Untuk setiap pengguna python yang sampai ke sini, pip uninstall mysqlclientdan pip install mysqlclientjuga bekerja.
Peter Dolan
26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Itu berhasil untuk saya. Saya menginstal MySQL dari file dmg.

Joseph
sumber
Ini berfungsi di Mac OS X - Yosemite untuk saya dengan MySQL yang diinstal dari file dmg. Terima kasih Joseph.
racl101
4
Operasi tidak diizinkan (jelas dengan sudo) versi SO saya adalah El capitan
ignacio chiazzo
16
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Bekerja untuk saya. Semua yang serupa tidak.

Greg Benner
sumber
Ini adalah solusi untuk RubyMine.
Justin
13

Saya mengalami masalah ini setelah penghapusan lengkap dan kemudian instalasi baru MySQL. Secara khusus:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

Saya bahkan belum menyentuh aplikasi Rails saya.

Menginstal ulang mysql2permata memecahkan masalah ini.

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)

[MySQL 5.7.10, Rails 4.0.0, Ruby 2.0.0, Mac OS X Yosemite 10.10]

sealocal
sumber
9

Jika Anda menggunakan MySQL yang diinstal dari HomeBrew di El Capitan, Anda harus menautkannya sebagai berikut:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
arjunswaj.dll
sumber
6

Untuk MySql 5.6 diinstal dari DMG di Mavericks

sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Abhishek Pande
sumber
4

Saya konfirmasi patch dari Abhishek melakukan pekerjaan.

ini juga berlaku untuk Yosemite.

catatan: daripada menautkan ke versi tertentu dari mysql, gunakan fakta mysql sudah membangun symlink:

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

solusi ini berfungsi untuk Xcode dan C API.

ingconti
sumber
3

Bagi mereka yang menggunakan minuman keras. Cukup tautkan versi mysql Anda dengan opsi "--force".

brew link mysql56 --force
tagaisme
sumber
Ini adalah cara untuk menautkan file perpustakaan ... daripada menggunakan opsi ln -s. Gunakan tautan minuman [email protected] --force untuk versi terbaru
Vahid Kowsari
Terima kasih. Saya lakukan brew link [email protected] --force. Bekerja dengan sempurna.
Aye Mon Chit
2

Untuk memastikan symlink apa yang dibutuhkan (tergantung versi mysql dan versi os):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

sehingga :

ln -s /usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Penipuan
sumber
2

Ini bekerja untuk saya:

ln -s /usr/local/Cellar/mysql/5.6.22/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Putra
sumber
Akhirnya menjadi variasi bagi saya ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor
1

Saya menggunakan Rails REE (2.3.4) untuk sistem lama yang kami miliki. Setelah memutakhirkan ke El Capitan, menjalankan skrip / konsol menghasilkan kesalahan dan aplikasi saya tidak lagi mulai (menggunakan pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


Dari utas ini, di atas, saya memutuskan bahwa saya perlu mengeluarkan perintah ini di terminal:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Perintah ini menghasilkan kesalahan: "ln: /usr/lib/libmysqlclient.18.dylib: Operasi tidak diizinkan". Saya belum pernah melihat kesalahan itu sebelumnya.

Setelah sedikit menggali, saya menemukan artikel ini: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html dan mengikuti instruksi untuk mematikan SIP (Perlindungan Integritas Sistem baru dari El Capitan). Setelah mematikan SIP, dan setelah reboot, perintah ln bekerja dengan baik. Lalu saya mematikan SIP. Sekarang semuanya baik-baik saja. Aplikasi saya berjalan lagi menggunakan pow dan tidak ada kesalahan menjalankan skrip / konsol. Saya harap ini membantu Anda.

GeezerGeek
sumber
1

Di Mac Sierra jika menggunakan Homebrew lakukan:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Abhishek
sumber
1
gem uninstall -aIx

dan

bundle install

bekerja untuk saya.

atomiccoder
sumber
1

Ini berhasil untuk saya. Yang harus saya lakukan adalah menghapus mysql2 gem dan menginstalnya lagi menggunakan perintah di bawah ini

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config
Magesh
sumber
1

Saya menggunakan Mac OS, dan saya terjebak dengan bug ini bahkan setelah mencopot / menghapus semua mysql dan MAMP. Sebelumnya, saya menginstal brew install mysqldan juga menggunakan MAMP. tautan lunak addling tidak berhasil untuk saya.

Itu hanya diselesaikan dengan menghapus semua mysql yang ada. dan kemudian instal mysql melalui MySQL dari sini .

Manish Shrivastava
sumber
0

gunakan ini dari baris perintah Anda:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

dicoba di beberapa komputer dengan maverick selalu bekerja

racun
sumber
0

Jika Anda menggunakan Bitnami RubyStack dan mengalami masalah serupa. Coba yang ini

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
noelvictorino.dll
sumber
0

Masalah saya dengan memuat file bundel itu adalah symlink yang buruk. Jadi periksa tautannya, dan ganti dengan yang baru jika perlu. Semuanya jatuh pada tempatnya pada saat itu. Tidak yakin bagaimana itu terjadi, tapi itu terjadi. Pertama kali terjadi kesalahan sintaks seperti itu.

Rich_F
sumber
0

Saya bekerja dengan perintah model g rails dan saya mendapatkan kesalahan ini:

Library not loaded: libmysqlclient.18.dylib

Saya telah mencoba ini dan itu berfungsi untuk saya. Saya menggunakan Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Terima kasih!

Sekarang saya menggunakan Yosemite 10.10.5 dan saya mendapatkan kesalahan yang sama, jadi saya baru saja menjalankan perintah ini di terminal dan berhasil diperbaiki.

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

Anda juga bisa mencoba:

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

Keduanya bekerja dengan baik untuk saya. Semoga bisa bermanfaat!

alexventuraio
sumber
0

Saya mendapat masalah ini "Library tidak dimuat: libmysqlclient.18.dylib" saat mengimpor MySQLdb dari MySQL Untuk python3 :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

Solusi berfungsi untuk saya: Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Binh Dang
sumber
@MSU_Bulldog Tentu saja itu menjawab pertanyaan itu. Ia bahkan memberikan informasi baru. Hanya karena sebuah jawaban menyertakan kesalahan yang membawa mereka ke sini, tidak berarti bahwa solusi yang mereka berikan juga tidak bernilai.
Artjom B.
0

Satu-satunya hal yang berhasil bagi saya adalah:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

Ganti jalur mysql dan permata agar sesuai dengan sistem Anda.

Aleksandar Pavić
sumber
0

Setelah banyak googling dan mencoba semua di atas ... satu-satunya hal yang memecahkan masalah saya adalah perintah ini:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Saya menggunakan macbook pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Versi Kernel Darwin 15.6.0: Kam 23 Jun 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19

Awan merah
sumber
0

Terima kasih. Pembaruan Homebrew membuat aplikasi Rails saya bermasalah di Mac saya. Saya menginstal ulang MySQL (5.7) dari sumber, lalu saya harus melakukan ini

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

berdasarkan apa yang saya baca di atas, dan di Gemfile saya

gem 'mysql2', '0.5.3'

dan di database.yml

adapter: mysql2
rodmclaughlin.dll
sumber
0

Sudah banyak jawaban untuk pertanyaan ini, terutama yang satu ini https://stackoverflow.com/a/10847618/5515861 . Saya hanya ingin menambahkan beberapa catatan. Jika Anda menggunakan Mac, saya tidak tahu bagaimana Anda menginstal MySQL, tetapi hal pertama yang harus diselidiki adalah di mana letak instalasi MySQL Anda. Bagi saya, MySQL diinstal menggunakan brewfor version 5.7, dan lokasinya /usr/local/opt/[email protected]/, jadi tambahkan berikut ini ke my ~/.zshrc.

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

Semoga Anda memperbaiki masalah Anda 😁

abmap
sumber