2010-12-22 14 views
36

sto ottenendo il seguente errore quando inizio guide del server:guide del server non si avvia con mysql2 utilizzando rvm & ruby ​​1.9.2-p0 su OSX 10.6.5

$ rails server 
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2.rb:7:in `require':  dlopen(/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError) 
Referenced from: /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2- 0.2.6/lib/mysql2/mysql2.bundle 
Reason: image not found - /Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-  
0.2.6/lib/mysql2/mysql2.bundle 

ho installato mysql2 con il seguente comando dopo il comando uso rvm ruby-1.9.2-p0:

$ gem install mysql2 -- --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config 
Building native extensions. This could take a while... 
Successfully installed mysql2-0.2.6 
1 gem installed 
Installing ri documentation for mysql2-0.2.6... 
Enclosing class/module 'mMysql2' for class Client not known 
Installing RDoc documentation for mysql2-0.2.6... 
Enclosing class/module 'mMysql2' for class Client not known 

ho mysql2 nel mio Gemfile così come nel file database.yml e bundle install completa bene

$ bundle show mysql2 
/Users/ssmith/.rvm/gems/ruby-1.9.2-p0/gems/mysql2-0.2.6 

Capisco che l'errore del server di rotaie è dovuto al fatto che non conosce la posizione mysql_config su OSX, tuttavia sull'installazione gem ho specificato la posizione corretta. Eppure la gemma di RVM non sta rispettando quella posizione di mysql_config che sembra.

Chiunque ha una soluzione a questo?

risposta

22

ho trovato la risposta qui: Mysql 5.5, Snow leopard and rails

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

Il problema con questo la soluzione è che ogni volta che (ri) installate la gemma (un esempio: in un diverso set di gemme RVM), dovrete ripetere il comando "install_name_tool'. La risposta di Sébastien, che fa riferimento al mio post sul blog, offre una soluzione più pulita, secondo me. –

+0

Si noti che anche la versione della libreria cambierà: attualmente è libmysqlclient.18.dylib (anziché 16), che deve essere inserito in entrambe le posizioni sopra. – scotchi

5

Bill,

risposta di Frederic risolverà questo problema, tuttavia potrebbe essere necessario cambiare alcune delle voci nel comando a seconda di versioni e come le cose sono nominati sul tuo sistema.

Per esempio, la versione più recente di MySQL libmysqlclient.16.dylib è in realtà libmysqlclient.18.dylib. Prova a fare un:

locate libmysqlclient.18.dylib 

Se questo non restituisce il percorso si può andare a:

/usr/local/{your-mysql}/lib 

per trovare il file. Quindi basta un PWD per trovare la directory corretta per il comando.

Sarà inoltre necessario determinare quali sono i nomi dei pacchetti effettivi dei rubini che sono stati installati. È possibile trovare questo utilizzando

rvm info 

Per esempio, la mia installazione di 1.9.2 è rubino 1.9.2.p180, non rubino-1.9.2p0. Questo dovrà essere cambiato anche nel comando di Frederics.

Quindi, per me il comando di Federico divenne per il fissaggio dei rubini RVM per 1.8.7 e 1.9.2 rispettivamente:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.8.7-p334/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
63

Il problema deriva dal gioiello mysql2 manca la libreria dinamica da MySQL.

Una soluzione più pulita di install_name_tool ... dovrebbe aggiornare il vostro DYLD_LIBRARY_PATH per aggiungere librerie MySQL ad esso. Per fare ciò, aggiornare il ~/.bash_profile per aggiungere la cartella della libreria di MySQL:

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

Nota: Si potrebbe voler aggiornare la posizione di MySQL, sulla base di installare

Questo dovrebbe mantenere le cose pulite, ma anche garantire che qualsiasi gemma o codice che richieda librerie dinamiche MySQL li troverà.

Riferimento: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Riferimento Aggiornamento Luglio 2012: Un cambiamento in OS X 10.8 rende il metodo facile sopra meno elegante. Se si imposta quella variabile, ogni volta che si esegue un programma setuid o setgid, si ottiene questo avvertimento su stderr:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

sviluppatori Ruby utilizzando Phusion Standalone passeggeri vedranno questo messaggio visualizzato nella loro console ogni cinque secondi. Diventa davvero irritante, molto veloce.

Ho archiviato un bug con Apple. È anche su OpenRadar.

Nel frattempo, c'è anche una terza via per risolvere il problema percorso libreria client che non richiede l'impostazione DYLD_LIBRARY_PATH (lavorando a questo problema 10.8) o l'hacking file .bundle con install_name_tool:

$ brew install mysql 
+0

funziona per me con RVM, Gemset e così via. –

+0

Questo non funzionerà se stai usando pow o passeggero, usa la risposta di Frederic sopra per farlo funzionare ... assicurati di eseguirlo sulla cartella 'ext' anche nella gem basedir – concept47

+0

Il trucco per me OSX 10.7, rvm ruby ​​1.9.3; Grazie! – marcgg

0

Ecco quello che faccio (simile ad altri)

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle 
1

mio era in una posizione diversa, ho dovuto usare:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle. 
3

seguito tramite: http://lightyearsoftware.com/2011/02/mysql-5-5-on-mac-os-x/

Aggiornamento Luglio 2012:

Un cambiamento in OS X 10.8 rende il metodo facile sopra meno elegante. Se si imposta quella variabile, ogni volta che si esegue un programma setuid o setgid, si ottiene questo avvertimento su stderr:

dyld: DYLD_ environment variables being ignored because main executable (...) is setuid or setgid 

sviluppatori Ruby utilizzando Phusion Standalone passeggeri vedranno questo messaggio visualizzato nella loro console ogni cinque secondi. Diventa davvero irritante, molto veloce.

Ho archiviato un bug con Apple. È anche su OpenRadar.

Nel frattempo, c'è anche una terza via per risolvere il problema percorso libreria client che non richiede l'impostazione DYLD_LIBRARY_PATH (lavorando a questo problema 10.8) o l'hacking file .bundle con install_name_tool:

$ brew install mysql 
8

Su OS X 10.8 (Mountain Lion), le risposte elencate hanno tutti problemi, come indicato nelle risposte e nei commenti.

  • Impostazione DYLD_LIBRARY_PATH per includere/usr/local/mysql/lib dà avvertimenti da OS X e da birra
  • Utilizzando install_name_tool per incidere in cui le gemme sguardi binari avrebbero bisogno di essere rifatto ogni volta che si installa la gemma o aggiornato.
  • Il passaggio al mysql dipotrebbe non funzionare; e in ogni caso non voglio riconfigurare un impianto già funzionante

Una soluzione IMHO più semplice e robusta è quello di mettere un link alla libreria nel percorso di ricerca della libreria di default dinamico, che offre la comodità di /usr/local/lib.Ovvero:

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

fantastico, ho provato tutto quanto sopra e questo ha funzionato immediatamente – ttati

+0

ha funzionato anche per me, grazie! – thomallen

0

Sono rimasto bloccato su questo per un po 'e sono venuto a una soluzione diversa.

Notate come la libreria che manca è versione a 16:

libreria non caricato: libmysqlclient.16.dylib (LoadError)

venuto fuori ho avuto la versione 20 di quella biblioteca - libmysqlclient.20.dylib

Avevo correttamente gem 'mysql2' nel mio Gemfile, ma quello che dovevo fare era disinstallare la gemma, gem uninstall mysql (Ho avuto più ve rsioni della gemma installata) e quindi facendo un nuovo bundle install per ottenere solo la versione di cui avevo bisogno di questa libreria.

Successivamente ha cercato e trovato la versione corretta di tale libreria.

0

mysql aggiornato alla versione più recente e reinstallare mysql2 gemma lavora per me brew upgrade mysql gem uninstall mysql2 gem install mysql2

BTW: La mia versione di MySQL è 5.7.18, la versione mysql2 gioiello è 0.4.5

Problemi correlati