Libreria non caricata: errore libmysqlclient.16.dylib durante il tentativo di eseguire 'rails server' su OS X 10.6 con mysql2 gem


206

Ho lottato con questo per qualche tempo.

Ho installato Rails 3, gem, mysql sulla mia macchina Snow Leopard. Tutto stava andando bene fino a quando ho creato il mio primo progetto e ho provato a correre

rails server

Eseguendo questo ottengo:

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$ 

Per quanto ne so, il problema è con la gemma mysql2. MySQL sembra funzionare bene e il mio Gemfile fa riferimento a mysql2, anche il mio file database.yml sembra ok.

L'errore menziona

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

E ancora

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 è lì !?

Se uso la vecchia gemma mysql, WEBrick si avvia bene. Ma non è l'ideale, vero?

Ho provato tutto ciò che Google può darmi! Qualsiasi aiuto molto apprezzato.

Risposte:


393

Non sono mai stato in grado di ottenere nessuna di queste risposte per funzionare per me, ma questo è il comando che ho usato per farlo funzionare per me. In questo modo non è necessario utilizzare install_name_tool ogni volta che si aggiorna mysql

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

11
Questo è il modo più semplice e giusto per risolvere quel problema.
Voldy,

2
grazie per questo. la risposta contrassegnata sopra ha funzionato solo per un sito, ma ha funzionato in modo permanente. È mo 'betta.
Fregas,

12
Per coloro che sono curiosi di sapere cosa sta succedendo, questo comando crea un collegamento simbolico dalla seconda posizione alla prima. Quando la gemma cerca la libreria client MySQL sotto /usr/lib, quel collegamento si risolverà nella posizione in cui è effettivamente installato. Su OS X, di solito è sotto /usr/local/mysql/lib, che è dove si collega questo comando. Se la tua libreria è installata in una posizione diversa, dovrai modificare questo comando. Digitare locate libmysqlclient.18.dylibe sostituire il risultato per il primo argomento dopo -s.
Siobhán,

1
@Sean D., quando eseguo individuare libmysqlclient.18.dylib ottengo questo output 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.cosa non va?
GiH,

1
@GiH Devi solo eseguire il comando che ti dice ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Ciò avvierà il processo di indicizzazione del disco rigido, che farà funzionare il locatecomando in futuro. Nella maggior parte dei casi, tuttavia, penso che non sarà necessario farlo, e posso semplicemente usare il comando fornito da luvlss così com'è.
Siobhán,

93

Alla fine l'ho risolto!

Ho reinstallato Ruby and Rails in RVM. Sto usando Ruby versione 1.9.2-p136.

Dopo la reinstallazione in rvm, questo errore era ancora presente.

Alla fine il comando magico che lo risolse fu:

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

Spero che questo aiuti qualcun altro!


1
Questo ha in qualche modo ripristinato i privilegi di mysql e ora non riesco ad accedere ... anche dopo aver eseguito una reimpostazione della password utilizzando un file come descritto nei documenti mysql.
Coderama,

2
Grazie, questo è stato per me. E per gli altri con lo stesso problema, se usi rvm, salta il sudo, altrimenti le autorizzazioni probabilmente cambieranno.
DanneManne

2
Il comando magico funziona anche se non stai usando RVM: cambia l'ultimo argomento per indicare mysql2-0.2.6/lib/mysql2/mysql2.bundledove sono installate le tue gemme.
Tobias Cohen,

2
Grazie mille. Come mai l'hai capito?
Derek,

7
Grazie! Avevo bisogno di un comando leggermente diverso per il mio Mac OS X Lion con RVM 1.6.4 con Ruby 1.9.2-p180, mysql2 gem 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

Per me questo è stato solo perché avevo aggiornato mysql ma non avevo aggiornato la gemma mysql2 - una reinstallazione della gemma lo risolverà ...

gem pristine mysql2


Questa dovrebbe essere la risposta selezionata.
El Guapo,

26

Ho lo stesso problema. Sembra che non sia in grado di trovare la libreria libmysqlclient. Una correzione temporanea che ha funzionato per me è la seguente:

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

Non sono sicuro di dove la configurazione stia specificando il percorso di caricamento o cosa sia impostato, ma la mia installazione mysql non sembra esserci. Pubblicherò di nuovo se trovo una soluzione più permanente.

Modifica: in realtà questa correzione sembra risolvere il problema con maggiore precisione.


24

Aggiungi il seguente al tuo ~/.bash_profile:

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

Questo ha funzionato per me


Sì, funziona su 1.9.3-p448. Peccato che non sia una risposta accettata.
Andreimarinescu,

17

Nell'aggiornamento di OSX El Capitan quando esegui questa operazione:

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

genera un errore come

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

Quindi, per evitare questo, quello che puoi fare è prima localizzare libmysqlclient.18.dylibusando il comando

User$ locate libmysqlclient.18.dylib

Nel mio caso è tornato /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Quindi invece di usr/lib/creare un collegamento simbolico in usr/local/lib/questo modo:

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

Maggiori dettagli: https://forums.developer.apple.com/thread/7935


1
Su El Capitan per me è bastata l'ultima riga:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Giustino,

Sono contento che abbia aiutato qualcuno. : D
Sony Mathew,

Questa è la risposta GIUSTA per elcapitan il tuo link di destinazione dovrebbe essere nella /usr/local/libcartella
Arnold Roa,

13

le seguenti righe funzionano per me. Sto usando mac 10.7.2.

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


1
Questo è ciò che ha risolto il mio problema. Grazie!
Justin Bozonier,

11

Ho appena riscontrato questo problema. Tutto quello che dovevo fare è disinstallare mysql2 gem e reinstallarlo. Spero che questo funzioni per altre persone


1
Sulla mia macchina, eseguendo Mavericks, ho rimosso tutte le versioni della gemma mysql2 con gem disinstallazione mysql2 e rispondendo All versionsal prompt. Ho quindi eseguito brew upgrade mysql e quindi gem install mysql2.
Martin Streicher,

4

Ecco come ha funzionato per me:

Ho eseguito il comando seguente
sudo nome_installazione_tool -cambia libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / gems / ruby-1.9.2-p180 / gems / mysql2-0-0.7 /lib/mysql2/mysql2.bundle

I miei ambienti:
$ rails -v Rails 3.0.6

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

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

Spero che questo aiuti qualcuno.


3

Grazie, Ogapo! Esportando quell'alias ha funzionato per me, e poi ho seguito il link, e nel mio caso il mysql2.bundle era attivo in /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle così Ho modificato install_name_tool per modificare quel bundle anziché uno in ~ / .rvm e ho fatto in modo che funzionasse come dovrebbe essere fatto.

Così ora:

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

3

ciao ha funzionato per me dal link consigliato da 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

ho dovuto cambiare alla mia versione di mysql, nel comando, grazie


3

Ho risolto questo problema cancellando il mio gemset per il mio progetto attuale e ricreandolo e rieseguendo l'installazione del bundle. Penso di averlo causato installando una versione più recente di mysql.


3

Ho avuto questo problema quando lavoro con Django, uso brewmolti dei miei programmi Open Source e ho dovuto fare quanto segue da quando ero solito brewinstallare mysql:

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

Assicurati di sostituire con la tua versione delle librerie!


3

bundle install mysql --forcemi ha aiutato. Ha reinstallato le dipendenze di cui sono andati a mancare gli articoli brew uninstall mysql.


Unknown switches '--force'
Arnold Roa,

2

Jonty, sto lottando anche con questo.

Penso che ci sia un indizio qui:

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)

Notate che il percorso per il dylib è piuttosto breve?

Sto cercando di capire dove le istruzioni di installazione delle gemme stanno lasciando fuori il percorso di dylib, ma è lento poiché non ho mai costruito una gemma da solo.

Pubblicherò di più se ne trovo di più!


2

Ho avuto esattamente lo stesso problema qualche giorno fa. Alla fine sono riuscito a risolverlo. Non sono sicuro di come, ma ti dirò comunque cosa ho fatto. Forse ti aiuterà.

Ho iniziato scaricando RVM. Se non lo stai ancora utilizzando, ti consiglio vivamente di farlo. Fondamentalmente crea un sandbox per una nuova installazione separata di Ruby, RoR e RubyGems. In effetti, puoi avere più installazioni contemporaneamente e passare immediatamente l'una all'altra. Esso funziona magicamente.

Perché è utile? Perché non dovresti scherzare con l'installazione predefinita di Ruby in OS X. Il sistema dipende da questo. È meglio lasciare solo l'installazione predefinita di Ruby e RoR e crearne una nuova utilizzando RVM che è possibile utilizzare per il proprio sviluppo.

Una volta creata la mia installazione Ruby separata, ho appena installato RoR, RubyGems e mysql e ha funzionato. Per i passi esatti che ho fatto, vedi la mia domanda: l' installazione di Rails, MySQL, ecc., Tutto va storto

Ancora: non so per certo che questo risolverà il tuo problema. Ma sicuramente ha fatto il trucco per me, e in ogni caso l'uso di RVM è altamente raccomandabile.


2

Ho ancora scoperto che con le soluzioni sopra, non ha funzionato (ad esempio) con il plug-in Rails per TextMate. Ho riscontrato un errore simile (durante il recupero dello schema del database).

Quindi quello che ha fatto è aprire il terminale:

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

Sostituisci mysql-5.5.8-osx10.6-x86_64 con il tuo percorso (o mysql).

Questo crea un collegamento simbolico alla lib, ora rails viene eseguito dalla riga di comando, così come i plugin TextMate come ruby-on-rails-tmbundle .

Per essere chiari: questo risolve anche l'errore che si ottiene all'avvio del server rails.


2

Questo di solito accade quando si aggiorna mysql. La gemma mysql2 installata che è stata costruita sulle vecchie librerie mysql non può funzionare con nuove librerie. Devo solo reinstallarlo.

Disinstallare mysql2 con gem uninstall mysql2. Quindi installalo congem install mysql2


1

L'ho risolto creando il file .rvmrc nella cartella del mio progetto contenente:

rvm use <yourrubie>

quindi inserendo il mio percorso di progetto

cd ~/myprojectpath

poi corro

bundle install

1

La mia versione del comando di luvlss:

Mac OSX 10.10.5

MySQL 5.6.27

Passeggero 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

Se stai provando molti link diversi, come ho fatto io, fai un po 'di pulizia con:

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


1

Apri un Terminale ed esegui quanto segue:

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

Dovrebbe funzionare.


1
Questo ha fatto il lavoro, grazie !!! Ho avuto problemi a far funzionare Django su Visual Studio Code. Continua a ricevere l'errore se ho installato mysqlclient su virtualenv.
Irshu

0

Se stai usando OSX e mysql installato usando brew, puoi:

brew link mysql

Se hai problemi con la versione (avevo mysql 5.7 in esecuzione mentre la mia gemma richiedeva 5.6.25), puoi farlo

brew unlink mysql
brew switch mysql 5.6.25

0

Per me ho dovuto disinstallare manualmente mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
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.