2010-09-20 17 views
60

Sto cercando di installare la gemma mysql2 tramite Bundler, ma mantiene morire con il seguente errore:Errori durante l'installazione gioiello mysql2 tramite Bundler

** executing command 
/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/installer.rb:483:in 'rescue in block in build_extensions': 
ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) 

/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-mysql-config=/usr/bin/mysql_config 
checking for rb_thread_blocking_region()... yes 
checking for mysql.h... no 
checking for mysql/mysql.h... no 

----- 
mysql.h is missing. please check your installation of mysql and try again. 
----- 

*** 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=/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby 
--with-mysql-config 
Gem files will remain installed for inspection. 

La maggior parte delle cose che ho trovato tramite Googling raccomandato passando il parametro --with-mysql-config a aggiustalo. Quindi, sulla base di:

$ which mysql_config 
/usr/bin/mysql_config 

ho aggiunto il testo seguente configurazione del Bundler:

$ bundle config build.mysql2 --with-mysql-config='/usr/bin/mysql_config' 

Tuttavia, ancora senza fortuna - stesso incidente come sopra.

Dal momento che sta morendo con l'errore mysql.h is missing, l'ho verificato, ed è presumibilmente in giro, non può essere trovato da Bundler.

$ find/-name mysql.h 
/usr/include/mysql5/mysql/mysql.h 

Qualche idea?

+2

Hai provato la soluzione all'indirizzo http://stackoverflow.com/questions/3608287/installing-mysql2-gem-for-rails-3? – Wrikken

+0

Altrimenti, potresti semplicemente modificare 'ext/mysql2/extconf.rb' e inserire il percorso corretto per la tua dir mysql (è vicino alla cima). – Wrikken

risposta

95

La risposta era simile a quella pubblicata da Wrikken - ecco cosa ho fatto per risolvere il problema per i futuri lettori.

(Questo è per RHEL 5.5 - comandi simili, ma diverse si applicano per Ubuntu/Debian/etc.)

Facendo sudo yum list installed stamperà tutti i pacchetti installati sul computer (nota: yum su RHEL richiede aggiungere un repository Red Hat Network [utilizzo EPEL] ed eseguirlo tramite sudo).

ho avuto mysql e mysql-server, che ha spiegato il motivo per cui MySQL ha funzionato bene per tutte le app pre-esistente, ma non mysql-devel, che è necessario per risolvere questo mysql.h is missing di errore e simili altri errori di generazione.

farla breve, dopo un mysqldump -u root -ppassword --all-databases > full-dump.sql per la sicurezza, è stato fissato con un semplice

sudo yum install mysql-devel 
+0

Funziona alla grande! Molte grazie! –

+9

In mac, fare 'brew install mysql' http: // stackoverflow.it/questions/3608287/installing-mysql2-gem-for-rails-3 –

+0

Nella mia installazione, 'mysql-devel' è stato installato, ma'/usr/include/mysql' era vuoto. 'mysql.h' si trovava invece in'/usr/include/mysql51'. Così ho eseguito 'sudo rmdir/usr/include/mysql; sudo ln -s/usr/include/mysql51/usr/include/mysql' e voilà! Mysql2 ora funziona correttamente. – Zee

33

Per Ubuntu essere necessario installare in seguito. libmysqlclient-dev libmysqlclient16

+0

Perfetto. Ha funzionato per me – Zabba

+0

+1 Grazie, mi hai salvato la giornata :-) –

+0

Quando l'ho provato su Ubuntu 16.04, non c'era 'libmysqlclient16', solo' libmysqlclient20'. Sospetto che qualunque versione di Ubuntu usi, qualcosa come "sudo apt-get install 'libmysqlclient *'' installerà entrambi i pacchetti richiesti, a patto che la versione aggiornata non rotti nulla. – mwfearnley

0

So che questo è antica, ma se qualcuno ottiene ancora questo errore zlib, accertarsi che hai scelto: uso rvm

(qualsiasi versione che si sta utilizzando)

Potrei giurare che l'ho fatto. Basta postare nel caso qualcuno stia tirando i capelli e questo aiuta. Se non è buona fortuna. :)

8

Il problema precedente si verifica perché il pacchetto mysql-devel non è installato correttamente nel sistema. Spiegherò lo stesso in Centos su come risolverlo. Quando si tenta di installare il pacchetto utilizzando,

yum install mysql-devel 

somtimes ci sarà qualche scontro si verifica con i pacchetti esistenti che viene installato se si installa lo strumento MySql-Amministrativo e MySQL Query Browser.

In tal caso, è necessario disinstallare tutti i pacchetti mysql2 esistenti e installarlo di nuovo.

rpm -qa -last | grep -i mysql 
    yum remove MySQL-server-5.5.27-1.rhel5 
    yum remove MySQL-client-5.5.27-1.rhel5 
    yum remove mysql-gui-tools-5.0r12-1rhel4 
    yum remove mysql-query-browser-5.0r12-1rhel4-a 

Quindi, è possibile disinstallare qualsiasi cosa mysql visualizzata con rpm -qa come sopra.

Quindi è possibile installare mysql-server e mysql-client.

yum install mysql-server 
    yum install mysql-client 

Ora si esegue l'installazione del pacchetto mysql-devel.

yum install mysql-devel 

Ora non ci sono conflitti di pacchetti e si può installare la gemma mysql2.

gem install mysql2 -v '0.3.11' 

Ora la tua gemma mysql2 verrà installata con successo e sei pronto per partire.

1

Nel mio caso il problema era uno script mysql_config che mostrava un comportamento anomalo. Quando viene richiamato dalla riga di comando con l'opzione --cflags sarebbe restituire una stringa di opzioni che contengono:

-Xclang -target-feature -Xclang -aes -Qunused-arguments

Per qualche ragione la chiamata a have_header ('mysql.h') nello script extconf.rb fallirebbe se quelle opzioni fossero incluse.

Che cosa ha funzionato per me era a portata di mano modificare il file mysql_config rimuovere il riferimento a tali opzioni dalla linea:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -Xclang -target-feature -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF " #note: end space!

che ho riscritto come:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -O2 -g -DDBUG_OFF " #note: end space!
20

Per Mac con una birra installazione di mysql la seguente soluzione ha risolto il problema per me:

Ho modificato il file mysql_config in /usr/local/Cellar/mysql/5.6.12/bin e rimosso le opzioni di W-compiler -Wno-nul l-conversion e -Wno-unused-private-field per cflags e cxxflags.

Questo ha risolto il problema con "gem install mysql2".

Riferimento: http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

+1

funziona per me. Grazie! – taiansu

+0

Anch'io! Grazie, ho salvato la mia giornata! –

0

mi sono imbattuto in questo problema durante l'installazione di pacchetto per redmine su Fedora 23. La soluzione che ho trovato è stato quello di emettere questo comando - sudo dnf install redhat-rpm-config.

Non solo ha risolto il problema con l'installazione di mysql2, ma anche di nokogiri e redcarpet.

1

Ho ricevuto lo stesso errore. e per ubuntu 16. Ho dovuto scrivere sotto il comando:

sudo apt-get install libmysqlclient-dev 

e funziona indietro.

Problemi correlati