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


119

Sto appena iniziando con Ruby (e rails). Ho eseguito la configurazione secondo http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, usando rvm. Ho tutto che funziona bene con sqlite.

Ora vorrei provare a convertire le cose in MySQL, poiché è ciò con cui svolgo 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 rails in MySQL ottengo:

$ 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

Ho visto altri post che consigliano di reinstallare MySQL tramite homebrew (il mio è stato installato tramite un DMG scaricabile), ma preferirei non farlo poiché ho già molti altri database 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?


Potrebbe essere un duplicato di questo? stackoverflow.com/questions/4546698/...
gmile

Infatti. Non riesco a cancellare la mia domanda? Votato per chiudere come dup.
George Armhold,

Risposte:


313

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 continua a non funzionare (questo funziona per me):

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

Ci sono molti blog con i install_name_toolquali non funzionano 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

16
Il collegamento simbolico ha funzionato per me (dopo l'aggiornamento a Mountain Lion). Grazie!
siannopollo

5
Symlink lo fa, specialmente per casi come l'esecuzione di rails da RubyMine dove .bash_profilenon si applica realmente.
maksimov

2
Ho aggiunto il tuo DYLD_LIBRARY_PATH a .bash_profile, ma ho anche dovuto disinstallare la gem "mysql2" e reinstallarla. come: 'gem disinstalla mysql2 && gem install mysql2'
brendan

73
Per coloro che vengono qui per il 10.11 non è più possibile collegarsi a usr/libun collegamento simbolico, ma un collegamento simbolico a usr/local/libfunzionerà:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons

2
@JonathanSimmons - Mi hai appena salvato dallo strapparmi il resto dei capelli. La risposta originale del collegamento simbolico non funziona su OS X 10.11.5, si finisce semplicemente con l'errore "ln: /usr/lib/libmysqlclient.18.dylib: operazione non consentita" - Ora tutto funziona e posso finalmente avviare il mio lavoro per la giornata ... Grazie!
Colin Adams

125

A El Capitan ho 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 inserito il collegamento /usr/local/lib.

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

Il server Rails funziona di nuovo bene.


2
Non avevo bisogno di tutta la risposta di Alex. Un collegamento simbolico ha funzionato.
gitb

Ho fatto questo e ho ottenuto: "connect ': Can't connect to local MySQL server through socket' /tmp/mysql.sock '(2) (Mysql2 :: Error)"
Josh Hunter

1
@ JoshHunter Credo che questa sia una questione separata. C'è un thread qui stackoverflow.com/questions/18449050/… potrebbe anche essere semplicemente che il server MySQL non è in esecuzione.
TinMonkey

sì, il server non era in esecuzione ... questo lo ha risolto. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter,

62

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

Nel mio caso (El Capitan, mysql installato tramite homebrew), a ha brew update && brew upgradecausato l'aggiornamento del pacchetto mysql a 5.7.10 (da 5.6.x).

L'aggiornamento ha dovuto libmysqlclient.18.dylibessere sostituito con libmysqlclient.20.dylib, ma la mysql2gemma faceva ancora affidamento 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, ad esempio )


Grande ! Ho aggiornato il mio mysql a 5.7 ... ho affrontato questo problema ..... fatto i seguenti passaggi 1. gem disinstalla mysql2> opzione selezionata 3 2. gem install mysql2 3. aggiunto questo a gemfile del progetto ---> gem 'mysql2' , '~> 0.3.21' 4. installazione bundle
Udit Kapahi

10
Consiglio a tutti di provarlo prima! Se funziona, puoi evitare di distruggere il tuo sistema con qualsiasi altra soluzione alternativa. A volte devi fare affidamento su collegamenti simbolici magici, ecc, ma rende il tuo sistema sempre più fragile. (Se non funziona, non viene fatto alcun danno e nulla da annullare.)
Tom Wilson,

Ha funzionato anche per me. Il problema era che sono passato dall'installazione di mysql con homebrew al programma di installazione ufficiale.
xenetics

1
Per tutti gli utenti di Python che arrivano qui, pip uninstall mysqlcliente hanno pip install mysqlclientanche funzionato.
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

Ha funzionato per me. Ho installato MySQL da un file dmg.


Questo ha funzionato su Mac OS X - Yosemite per me con MySQL installato dal file dmg. Grazie Giuseppe.
racl101

4
Operazione non consentita (ovviamente con sudo) la mia versione SO è El capitan
ignacio chiazzo

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

Ha funzionato per me. Tutti quelli simili no.


Questa è la soluzione per RubyMine.
Justin

13

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 mysql2gemma ha 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]


9

Se stai usando MySQL installato da HomeBrew in El Capitan, dovresti collegarlo come segue:

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

6

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

4

I patch di conferma da Abhishek fa lavoro.

funziona anche per Yosemite.

nota: invece di collegarti a una particolare versione di mysql, usa il symlink già creato da mysql:

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

questa soluzione funziona per Xcode e C API.


3

Per coloro che utilizzano brew. Collega semplicemente la tua versione di mysql con l'opzione "--force".

brew link mysql56 --force

Questo è il modo per collegare il file della libreria ... piuttosto che usare l'opzione ln -s. Usa brew link mysql@5.7 --force per la versione aggiornata
Vahid Kowsari

Grazie. L'ho fatto brew link mysql@5.7 --force. Ha funzionato perfettamente.
Aye Mon Chit

2

Per essere sicuri di quale collegamento simbolico è necessario (dipende dalla versione di mysql e dalla versione del sistema operativo):

$ 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

2

Questo funziona per me:

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

Finì per essere una variazione per me ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor

1

Sto usando Rails REE (2.3.4) per un sistema legacy che abbiamo. Dopo l'aggiornamento a El Capitan, l'esecuzione di script / console ha generato un errore e la mia app non si avviava più (utilizzando 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 stabilito 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 quell'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 disattivare SIP (la nuova protezione dell'integrità del sistema di El Capitan). Dopo aver disattivato SIP e dopo il riavvio, il comando ln ha funzionato correttamente. Quindi ho disattivato SIP. Adesso va tutto bene. La mia app viene eseguita di nuovo utilizzando pow e nessun errore durante l'esecuzione di script / console. Spero che questo ti aiuta.


1

Su Mac Sierra se usi Homebrew, fai:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib


1

Questo ha funzionato per me. Tutto quello che dovevo fare è disinstallare mysql2 gem e installarlo di nuovo utilizzando i comandi seguenti

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

1

Sto usando Mac OS e sono rimasto bloccato con questo bug anche dopo aver disinstallato / rimosso tutti i mysql e MAMP. In precedenza, ho installato brew install mysqle utilizzato anche MAMP. addling softlink non ha funzionato per me.

È stato risolto solo rimuovendo tutto il mysql esistente. e quindi installa mysql tramite MySQL da qui .


0

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


0

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

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

0

Il mio problema con il caricamento di quel file bundle era un collegamento simbolico errato. Quindi controlla il collegamento e sostituiscilo con uno nuovo se necessario. A quel punto è andato tutto a posto. Non sono sicuro di come sia successo, ma è successo. La prima volta che si è verificato un errore di sintassi in questo modo.


0

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

Library not loaded: libmysqlclient.18.dylib

L'ho provato 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 ricevuto lo stesso errore, quindi ho appena eseguito questo comando sul terminale ed è stato risolto con successo.

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

inoltre puoi 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!


0

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

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

@MSU_Bulldog Ovviamente risponde alla domanda. Fornisce anche nuove informazioni. Solo perché una risposta include l'errore che li ha portati qui non significa che anche la soluzione che forniscono sia priva di valore.
Artjom B.

0

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 gems per adattarli al tuo sistema.


0

Dopo aver cercato su Google e provato tutto 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: giovedì 23 giugno 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19


0

Grazie. Un aggiornamento Homebrew ha fatto sì che le mie app Rails presentassero problemi sul mio Mac. Ho reinstallato MySQL (5.7) dal sorgente, quindi ho dovuto farlo

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

in base a ciò che ho letto sopra e nel mio Gemfile

gem 'mysql2', '0.5.3'

e in database.yml

adapter: mysql2

0

Ci sono già molte risposte a questa domanda, specialmente questa https://stackoverflow.com/a/10847618/5515861 . Voglio solo aggiungere un paio di note. Se usate un Mac, non so come installate MySQL, ma la prima cosa da indagare è dove si trova la vostra installazione di MySQL. Per me, MySQL viene installato utilizzando brewper la versione 5.7e la posizione è /usr/local/opt/mysql@5.7/, quindi aggiungi quanto segue al mio ~/.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

Spero che tu risolva i tuoi problemi 😁

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.