rails + MySQL su OSX: libreria non caricata: libmysqlclient.18.dylib

Sto appena iniziando con Ruby (e le guide). Ho fatto il setup in base alle http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, usando rvm . Ho tutto ciò che funziona bene con sqlite.

Ora mi piacerebbe provare a convertire le cose su MySQL, dal momento che è quello con cui faccio la maggior parte del mio sviluppo. Nel mio Gemfile ho sostituito sqlite con mysql2:

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

Ma quando provo a creare il DB per i binari in MySQL ottengo:

 $ rake db:create --trace rake aborted! dlopen(/Users/username/.rvm/gems/[email protected]/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib Referenced from: /Users/username/.rvm/gems/[email protected]/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle Reason: image not found - /Users/username/.rvm/gems/[email protected]/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle 

Ho visto altri post che raccomandavano di reinstallare MySQL tramite homebrew (il mio è stato installato tramite un DMG scaricabile), ma preferirei non farlo poiché ho già molti altri database in esso contenuti per altri progetti non ruby.

In effetti ho il file che Rails sta cercando; è installato in /usr/local/mysql/lib/libmysqlclient.18.dylib . Qual è il modo migliore per dire a Rails come individuarlo?

La soluzione è abbastanza semplice; Aggiungi il percorso della libreria nel tuo file ~ / .bash_profile o ~ / .profile:

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

Se non funziona ancora (questo lavoro per me):

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

Ci sono molti blog con install_name_tool , che non funzioneranno per me perché sono su 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 

In El Capitan ho ottenuto ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

In El Capitan /usr/lib/ ora ha un flag limitato e non può essere scritto senza disabilitare la sicurezza, quindi ho semplicemente messo il link in /usr/local/lib .

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

Il server Rails sta funzionando di nuovo bene.

Mentre il titolo di questa domanda descrive con precisione il problema che ho incontrato, le circostanze sono diverse da quelle descritte nelle risposte precedenti, e così è stata la soluzione.

Nel mio caso (El Capitan, mysql installato tramite homebrew), un brew update && brew upgrade un brew update && brew upgrade sì che il pacchetto mysql venisse aggiornato a 5.7.10 (da 5.6.x).

L’aggiornamento ha causato la sostituzione di libmysqlclient.20.dylib con libmysqlclient.20.dylib , ma la gem mysql2 si basava ancora sul primo.

Per risolvere il problema ho fatto: gem uninstall mysql2 && gem install mysql2

Si noti che problemi simili possono verificarsi con diverse librerie gestite da homebrew ( vedere la mia risposta a questo, per esempio )

 sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

Questo ha funzionato per me. Ho installato MySQL da un file dmg.

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

Ha funzionato per me Tutti quelli simili no.

Se stai utilizzando MySQL installato da HomeBrew in El Capitan, devi collegarlo come segue:

 sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib 

Mi sono imbattuto in questo problema dopo una rimozione completa e quindi una nuova installazione di MySQL. In particolare:

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

Non avevo nemmeno toccato la mia app Rails.

La reinstallazione della gem mysql2 risolto questo problema.

 $ 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]

Per MySql 5.6 installato da DMG su Mavericks

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

Confermo che patch di Abhishek funziona.

funziona anche per Yosemite.

nota: invece di colbind a una particolare versione di mysql, usa il fatto che mysql ha già creato un link simbolico:

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

questa soluzione funziona per Xcode e C API.

Per essere sicuri di quale symlink è necessario (dipende dalla versione di mysql e dalla versione os):

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

e così :

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

Questo funziona per me:

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

Sto usando Rails REE (2.3.4) per un sistema legacy che abbiamo. Dopo l’aggiornamento a El Capitan, lo script di esecuzione / console ha fatto scattare un errore e la mia app non sarebbe più iniziata (usando 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) 

Da questo stesso thread, sopra, ho determinato che dovevo emettere questo comando nel terminale:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Questo comando ha prodotto un errore: “ln: /usr/lib/libmysqlclient.18.dylib: Operazione non consentita”. Non ho mai visto questo errore prima.

Dopo un po ‘di ricerche, ho trovato questo articolo: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html e ho seguito il istruzioni per distriggersre SIP (la nuova protezione di integrità del sistema di El Capitan). Dopo aver spento SIP, e dopo il riavvio, il comando ln ha funzionato correttamente. Quindi ho distriggersto SIP. Ora va tutto bene. La mia app viene eseguita di nuovo usando pow e nessun errore eseguendo script / console. Spero che questo ti aiuta.

Su Mac Sierra se si utilizza Homebrew, quindi eseguire:

 sudo ln -s /usr/local/Cellar/[email protected]/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib 
 gem uninstall -aIx 

e

 bundle install 

ha funzionato per me

Per coloro che usano la birra. Collega semplicemente la versione di mysql con l’opzione “–force”.

 brew link mysql56 --force 

usa questo dalla tua riga di comando:

 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 

provato su pochi computer con Maverick funziona sempre

Se stai usando Bitnami RubyStack e hai riscontrato il problema simile. Prova questo

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

Il mio problema con il caricamento di quel file bundle era un brutto link simbolico. Quindi controlla il link e sostituiscilo con uno nuovo se necessario. Tutto è andato a posto in quel punto. Non so come sia successo, ma è successo. La prima volta che si è verificato un errore di syntax in questo modo.

Stavo lavorando con il comando rails g model e ho ricevuto questo errore:

 Library not loaded: libmysqlclient.18.dylib 

Ho provato questo e ha funzionato per me. Stavo usando 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 

Grazie!

Ora sto usando Yosemite 10.10.5 e ho ottenuto lo stesso errore, quindi ho appena eseguito questo comando sul terminale e il problema è stato corretto.

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

puoi anche provare:

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

Entrambi funzionano bene per me. Spero possa essere utile!

Ho ricevuto questo problema “Libreria non caricata: libmysqlclient.18.dylib” durante l’importazione di MySQLdb da MySQL Per python3 :

  Traceback (most recent call last): File "test.py", line 3, in  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  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 

La soluzione funziona per me: 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 

L’unica cosa che ha funzionato per me è:

 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 

Sostituisci i percorsi di mysql e gemme per adattarli al tuo sistema.

Dopo molte ricerche su google e tutto quanto sopra … l’unica cosa che ha risolto il mio problema è stato questo comando:

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

Sto usando un MacBook Pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Versione 15.6.0: Gio 23 Giu 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19