2013-06-21 20 views
28

Zaktualizowałem wszystkie pakiety, które zainstalowałem z Homebrew. MySQL dostali 5.6.12 (od 5.5.27 lub tak):Klejnot mysql2 nie kompiluje się z MySQL 5.6.12 na OS X z Homebrew

$ mysql --version 
mysql Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using EditLine wrapper 

a teraz gem mysql2 nie kompiluje już:

$ gem install mysql2 
Building native extensions. This could take a while... 
ERROR: Error installing mysql2: 
    ERROR: Failed to build gem native extension. 

     /Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby extconf.rb 
checking for rb_thread_blocking_region()... yes 
checking for rb_wait_for_single_fd()... 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 
    --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=/Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby 
    --with-mysql-config 
    --without-mysql-config 

Plik mysql.h jest obecny w /usr/local/Cellar/mysql/5.6.12/include/mysql.h. Jakieś pomysły, co się dzieje?

Plik mysql.h nie pojawia się w /usr/local ponieważ dowiązanie wydaje się głębiej niż powinno:

$ ls -la /usr/local/include/mysql 
lrwxr-xr-x 1 pupeno admin 36 21 Jun 15:18 /usr/local/include/[email protected] -> ../Cellar/mysql/5.6.12/include/mysql 

zamiast

/usr/local/Cellar/mysql/5.6.12/include 

Mimo, że ja ręcznie ustalony dowiązania i kompilacja wciąż nie powiodła się. Więc utknąłem.

+1

Czy masz zainstalowaną bibliotekę programisty mysql? –

+0

@HunterMcMillen Myślałem, że wszystkie pliki rozwojowe zostały zainstalowane z twoim pakietem mysql brew. czego mi brakuje? – Pablo

+0

Homebrew + rbenv zawsze pracował dla mnie. Czy to może być problem z RVM? Czy też 'mysql.h' jest obecny tam, gdzie myślisz? – tadman

Odpowiedz

30

Miałem ten sam problem, udało mi się to naprawić. Zrobiłem wiele rzeczy i nie wiem na pewno, co to było, ale przejście do MySQL 5.6.10 prawdopodobnie zadziałało.

Odinstaluj MySQL 6.5.12:

brew unlink mysql 
brew uninstall mysql 

Przejdź do katalogu homebrew:

cd /usr/local 

idź do wersji 5.6.10 (można znaleźć listę wersji uruchamiając brew versions mysql:

git checkout 48f7e86 Library/Formula/mysql.rb 

Następnie zainstaluj ponownie mysql:

brew install mysql 

A teraz gem install mysql2 działa dla mnie.

Zainstalowałem również mysql ze źródła (brew install mysql --build-from-source), ale to nie rozwiązało, ale może być częścią rozwiązania.

+7

Odpowiedź iaina rozwiązała to dla mnie. W homebrew 0.9.4 (nie ma pewności co do innych wersji) możesz użyć 'brew pin mysql' po obniżeniu do 5.6.10, co uniemożliwi aktualizację, jeśli będziesz regularnie używał' brew upgrade '. –

+0

Dzięki temu pomóżcie mi. – prcaen

+0

Działa jak urok! :) – sborsje

8

To również sprawdziło się dla mnie. Zmusza gem do kompilacji przeciwko 5.6.10.

bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config 

odpowiedź pokrewne: https://stackoverflow.com/a/9360181

+1

To będzie działać tylko wtedy, gdy faktycznie jest zainstalowany mysql 5.6.10 na tej ścieżce. – Jan

+1

Pracował świetnie! Wystarczy upewnić się, że ścieżka wskazuje zainstalowaną wersję MySQL. (W moim przypadku musiałem skompilować przeciwko 5.1) –

+0

To przepisuje '~/.bundle/config'. –

18

tylko;)

gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config 
9

Górny odpowiedź tutaj jest out-of-date ... browary mają stałe mysql:

brew update 
brew upgrade mysql 
gem install mysql2 

ten zaktualizuje mysql do 5,6.13, który wydaje się działać dobrze z klejnotem mysql2 na OSX.

+0

Pracował jak urok! Dzięki stary. –