2009-08-26 12 views
22

ha spostato una mia app su un nuovo server e ha dovuto installare alcune dipendenze gem. Tuttavia, dopo aver installato mysql gem, ottengo l'errore, costante non inizializzata MysqlCompat :: MysqlRes, ogni volta che provo a eseguire un comando rake che coinvolge il database mysql. Sembra che ottengo questo errore solo quando richiedo la gemma mms2r. Qualcuno ha mai sentito parlare di questo? Sto usando mysql 2.8.1 gem.costante non inizializzata MysqlCompat :: MysqlRes (utilizzando mms2r gem)

+0

Questo problema riguarda anche altre gemme - fortunatamente la correzione di Markus qui sotto si applica a tutti – mikeh

risposta

47

sul mio Mac OS X 10.6 ho fatto questo per installare la 2.8.1 gemma, che ha funzionato perfettamente con i miei MacPorts mysql5-server:

sudo env ARCHFLAGS="-arch x86_64" gem install mysql 
+1

Ha funzionato perfettamente per me. –

+4

Quando si lavora con rvm, questa linea ha funzionato senza il sudo nella parte anteriore. –

+0

@KyleHeironimus - cosa intendi con "quando lavori con rvm"? Ho rvm installato, ma quando eseguo il comando senza 'sudo', ottengo" Non hai permessi di scrittura ... ". Che cosa devo fare in modo diverso per farlo funzionare "con rvm"? (Scusate, sono molto nuovo a questo.) – callum

3

Sì, ho visto un messaggio di errore simile, cercando la stessa classe di MysqlCompat inesistente :: MysqlRes

Come si è visto, che la classe non dovrebbe esistere; il messaggio di errore è causato da un problema con l'ultimo driver Mysql. mysql-2.8.1 cercava le mie librerie in una directory chiamata con un livello extra di "mysql" alla fine. Ad esempio, le mie librerie (sotto MacOS X 10.5.8), sono in/usr/local/mysql/lib, ma la libreria mysql.bundle cerca le librerie MySQL su/usr/local/mysql/lib/mysql ... che è sbagliato.

L'ho trovato abbastanza facile da risolvere, creando un collegamento simbolico in/usr/local/mysql/lib chiamato 'mysql', che punta a '.'

Così quando le librerie sono referenziate a quella profondità extra, vengono trovate e funzionano. Questo è decisamente un hack; Sono sicuro che ci sono modi più appropriati per risolvere questo problema. Ho solo bisogno che funzioni per poter andare avanti con altre cose.

Inoltre, questo potrebbe non funzionare per voi. E 'probabile che il lavoro se il vostro errore si presenta come:

./mysql.bundle: dlopen(./mysql.bundle, 9): Library not loaded: /usr/local/mysql/lib/mysql/libmysqlclient.15.dylib (LoadError) 
    Referenced from: /Users/ccullen/Projects/npapp-v2/mysql-ruby-2.8.1/mysql.bundle 
    Reason: image not found - ./mysql.bundle 
    from test.rb:5 

Dal momento che questo sembra essere uno sviluppo recente e non avevo visto alcuna risposta diretta ad esso, ho pensato di condividere come ho riparato. Buona fortuna :)

2

gem install -v = 2.7.1 risolverà anche.

+0

solo su Windows – davetron5000

0

Ho provato tutto quanto sopra e nessuno di loro lavoro per me. Quando si tenta di installare MySQL versione 2.7, ottengo l'errore:

sudo gem install -v=2.7.1 mysql -- --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config 
ERROR: could not find gem mysql locally or in a repository 
F107PHD:stepgreen.org tdillahu$ sudo gem install -v=2.7 mysql -- --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config 
Building native extensions. This could take a while... 
ERROR: Error installing mysql: 
    ERROR: Failed to build gem native extension. 

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb --with-mysql-dir=/usr/local/mysql-5.1.39-osx10.5-powerpc/bin/mysql_config 
checking for mysql_query() in -lmysqlclient... no 
checking for main() in -lm... no 
checking for mysql_query() in -lmysqlclient... no 
checking for main() in -lz... no 
checking for mysql_query() in -lmysqlclient... no 
checking for main() in -lsocket... no 
checking for mysql_query() in -lmysqlclient... no 
checking for main() in -lnsl... no 
checking for mysql_query() in -lmysqlclient... no 
*** extconf.rb failed *** 
Could not create Makefile due to some reason, probably lack of 
necessary libraries and/or headers. Check the mkmf.log file for more 
details. You may need configuration options. 

Provided configuration options: 
    --with-opt-dir 
    --without-opt-dir 
    --with-opt-include 
    --without-opt-include=${opt-dir}/include 
    --with-opt-lib 
    --without-opt-lib=${opt-dir}/lib 
    --with-make-prog 
    --without-make-prog 
    --srcdir=. 
    --curdir 
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby 
    --with-mysql-config 
    --without-mysql-config 
    --with-mysql-dir 
    --with-mysql-include 
    --without-mysql-include=${mysql-dir}/include 
    --with-mysql-lib 
    --without-mysql-lib=${mysql-dir}/lib 
    --with-mysqlclientlib 
    --without-mysqlclientlib 
    --with-mlib 
    --without-mlib 
    --with-mysqlclientlib 
    --without-mysqlclientlib 
    --with-zlib 
    --without-zlib 
    --with-mysqlclientlib 
    --without-mysqlclientlib 
    --with-socketlib 
    --without-socketlib 
    --with-mysqlclientlib 
    --without-mysqlclientlib 
    --with-nsllib 
    --without-nsllib 
    --with-mysqlclientlib 
    --without-mysqlclientlib 


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql-2.7 for inspection. 
Results logged to /Library/Ruby/Gems/1.8/gems/mysql-2.7/gem_make.out 

mio errore originale: Ake interrotta! non inizializzati costanti MysqlCompat :: MysqlRes /vendor/rails/activesupport/lib/active_support/dependencies.rb:440:in load_missing_constant' /vendor/rails/activesupport/lib/active_support/dependencies.rb:80:in const_missing'

+0

Per aggirare questo problema ho dovuto usare (--with-mysql-config = e non --with-mysql-dir): sudo gem installa mysql - --with-mysql-config =/usr/local/mysql-5.0.86-osx10.5-x86/bin/mysql_config. –

+0

Va bene se il tuo mysql è installato in/usr/local/ma dove trovi mysql_config se mysql è stato installato dal gestore pacchetti? – daf

1

sudo gem install mysql-v 2.7 dovrebbe fare il trucco ...

+0

Per OS X, questo (2.7) dovrebbe funzionare; 2.7.1 non esiste per OS X – davetron5000

0

ho avuto lo stesso problema dopo l'aggiornamento da Fedora 10 a Fedora 12. I riparato semplicemente disinstallando mysql gem e reinstallandolo di nuovo. Quindi è conforme alla nuova versione di MySQL.

0

sudo gem install mysql -v 2.7 - --with-mysql-config =/usr/local/mysql/bin/mysql_config

ha funzionato perfettamente per me :)

1

sudo gem install mysql - v 2.7 - --withwith-mysql-config =/usr/local/mysql/bin/mysql_config ha fatto anche il trucco per me durante la migrazione sul mio nuovo laptop Snow Leopard. Non ho usato MacPorts per installare mysql, ma piuttosto il binario, e non ho avuto fortuna con le soluzioni di flag di arco o collegamenti simbolici.

0
sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 

ha funzionato anche per me quando flag arco e collegamenti simbolici non ha funzionato! GRAZIE!!

0
sudo env ARCHFLAGS="-arch x86_64" gem install mysql 

pacchetto Dmg dal sito mysql un ddone!

2

Questo problema è apparso con me, dopo aver aggiornato Ubuntu dal 9.10 al 10.04.

Sembra essere un problema con la gemma mysql.

Sintomi: Qualsiasi uso di ActiveRecord che richiede una connessione a MySQL produce una traccia dello stack provenienti da "non inizializzato costante MysqlCompat :: MysqlRes"

ho provato un "aggiornamento mysql gioiello" e ha scoperto che non ho potuto costruire estensioni native perché il compilatore non riesce a trovare la libreria mysql_client. Quella libreria (libmysqlclient.so.16) si trova in/usr/lib.

Fix per Ubuntu 10.04:

Come root, ho fatto questi:

apt-get install libmysqlclient-dev 
gem install mysql 

ho notato che diverse persone stanno cercando le cose qui e mi chiedo se non stiamo localizzare la radice causa.

Le variabili che la gente ha bisogno di chiarire nelle loro risposte:

  • versione del sistema operativo - quale versione di quello che stai usando?
  • dove e come hai installato mysql? - le persone qui sembrano aver installato il loro mysql dal sorgente in/usr/local (ho installato il mio tramite il sistema di confezionamento ubuntu)
  • sei su un ubuntu 64 bit o 32 bit? (Sono attualmente in 32 bit.)
+0

Sto avendo lo stesso problema su Ubuntu 12.10. La tua soluzione non è stata di grande aiuto ... – confiq

2

con MySQL gemma (2.8.1) mi è stato sempre

uninitialized constant MysqlCompat::MysqlRes

Utilizzando -v 2.7 farlo funzionare perfettamente e per chi ha usato per Homebrew installa mysql

sudo gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/Cellar/mysql/5.1.48/bin/mysql_config

Nota che è possibile modificare la versione di mysql se necessario.

0

Su Mac OS X 10.6.4, ho dovuto specificare l'architettura e config:

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

10

Il mio problema era dovuto alle mie "mysql" essere un'installazione a 32 bit, mentre ruby ​​era 64 e 32 bit.Verificare con questi comandi

file `which mysql` 
file `which ruby` 

Entrambi dovrebbero corrispondere Mach-O a 64 bit x86_64 eseguibile o Mach-O a 64 bit i386 eseguibile. Ho installato un mysql a 64 bit, quindi

export ARCHFLAGS="-arch x86_64" ; sudo gem install --no-rdoc --no-ri mysql -v 2.7 -- --with-mysql-dir=/usr/local --with-mysql-config=/usr/local/mysql/bin/mysql_config 

e voilà!

+0

Questo è stato il punto critico per me. MySQL, Ruby e la gemma mysql/ruby ​​devono essere tutti a 64 bit. –

1
gem uninstall mysql 

gem install mysql -v 2.7 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 

ldconfig /usr/local/mysql/lib/mysql 

RAILS_ENV=production rake db:migrate --trace 

Questo ha funzionato per me.

+0

comando ldconfig non trovato, questo è per mac? per ubuntu? per Windows? per un tostapane? –

1
sudo apt-get install libmysqlclient15-dev 
1

Ho provato tutto il resto qui, ma ho ancora il problema. Il downgrade da MySQL 5.5 a 5.1 lo ha risolto per me. (Mac OS X 10.6.5)

0

Questo è ciò che ha funzionato per me. Ho letto un sacco di post e ho scoperto che l'installazione di ruby ​​del sistema causava un problema di incompatibilità:

  1. non utilizzare l'installazione di ruby ​​predefinita! installa ruby ​​con macports
  2. non utilizzare installazione rubygems predefinita! installare rb-rubygems con macports
  3. usare MySQL 5.1 (non 5,5) - installato dal mysql.com Mac .dmg
  4. 4.

sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

1

Downgrade (da 5,9) per MySQL 5.1 ha aiutato a 10.6. .. eseguendo entrambe le gemme mysql e mysql2.

26

Fondamentalmente il problema è la libreria dinamica libmysqlclient non può essere trovata. Le soluzioni di cui sopra funzioneranno, ma è necessario riapplicarle ogni volta che si ricostruisce la gemma o quando si installa una nuova versione di MySQL.

Un approccio alternativo consiste nell'aggiungere la directory MySQL che contiene la libreria al percorso di carico dinamico. Mettere il seguente nel mio file .bashrc ha risolto il problema:

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

Questo ha funzionato per me ... OSX 10.7.3 per mysql gem 2.8.1 –

+0

grazie, ha funzionato! – mkk

+1

Se esporti questo in 'osx 10.8.2' e poi in seguito sudo, ricevi un avvertimento come" Variabili d'ambiente DYLD_ ignorate "ma [è solo un avvertimento] (https://discussions.apple.com/thread/ 4143805? start = 0 & Tinizio = 0) –

1

MySQL e mysql2 gemme lavorano entrambi su Ruby 1.9.2 solo aggiornare rubino e installare la gemma è necessario.

Problemi correlati