Błąd podczas próby zainstalowania aplikacji za pomocą klejnotu mysql2

84

Próbuję zainstalować aplikację rails 3.2.21 typu open source, która używa mysql2klejnotu, ale kiedy próbuję uruchomić bundleCommant, pojawia się następujący błąd:

Fetching: mysql2-0.3.18.gem (100%)
Building native extensions.  This could take a while...
p
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    /Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.rb extconf.rb
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
-----
Using mysql_config at /usr/local/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql/5.6.25/lib
-----
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/Users/travis/.sm/pkg/active/lib'
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86

Próbowałem odinstalować każdą wersję mysqlzainstalowaną przez homebrew i ponownie ją zainstalować, na przykład:

brew uninstall --force mysql && brew install mysql

Następnie bieganie:

sudo gem install mysql2

Jak sugeruje szereg podobnych pytań zadanych tutaj, ale nadal powoduje to ten sam błąd, co powyżej.

Czy ktoś mógłby udzielić wskazówek, jak to skonfigurować i uruchomić?

zenvelope
źródło
spróbuj uruchomić "brew doctor" i sprawdź czy są jakieś błędy. Jeśli tak, postępuj zgodnie z instrukcjami i spróbuj ponownie.
KM
Czy zainstalowałeś zależności gem? github.com/brianmario/mysql2#general-instructions
lcguida
@ValAsensio, serdecznie się z tobą nie zgadzam, myślę, że powinieneś zawsze starać się wykorzystać swoją bazę produkcyjną w rozwoju, jeśli to możliwe. Nigdy nie używam sqlite w programowaniu, ani nikt, z kim pracuję.
niels
@niels. Tak. Zgadzam się z tym: „Myślę, że zawsze powinieneś próbować wykorzystać swoją bazę produkcyjną w rozwoju”. Ten mój starożytny komentarz był bezużyteczny. Usunąłem to.
Elvn,

Odpowiedzi:

55

Dziennik błędów mówi:

ld: library not found for -lssl

Musisz więc zainstalować libssl:

brew install openssl

Jak wskazano w komentarzach, może zaistnieć potrzeba wyeksportowania ścieżki do biblioteki.

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Aleksei Matiushkin
źródło
27
To nie wystarczyło, trzeba to później wyeksportować w ten sposób:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Gilg Him
export LIBRARY_PATH = $ LIBRARY_PATH: / usr / local / opt / openssl / lib / `Działa u mnie po długiej próbie. Dzięki!!
Abhi,
162

Dla każdego, kto nadal ma problem:

Po zainstalowaniu openssl przez brew, powinieneś otrzymać następujący komunikat:

Firma Apple zrezygnowała z używania OpenSSL na rzecz własnych bibliotek TLS i kryptowalut

Zasadniczo nie ma to dla Ciebie żadnych konsekwencji. Jeśli tworzysz własne oprogramowanie i wymaga ono tej formuły, musisz dodać do swoich zmiennych kompilacji:

LDFLAGS: -L / usr / local / opt / openssl / lib
CPPFLAGS: -I / usr / local / opt / openssl / include
PKG_CONFIG_PATH: / usr / local / opt / openssl / lib / pkgconfig

Możesz ustawić te flagi kompilacji (dla aplikacji lokalnej), uruchamiając następujące polecenie:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

To zadziałało dla mnie.

Więcej informacji można znaleźć w dokumentacji bundlera .

Alessandro Berardi
źródło
79
Jeśli chcesz tylko skorzystać gem install, działa to: gem install mysql2 -v '0.3.21' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
niels
^^^ @niels to powinna być odpowiedź ... Alessandro's nie działa na Sierra ("Ostrzeżenie: odmowa linku: open ssl ..." -> coś wspólnego z przestarzałym systemem openssl)
12
2
Rozwiązanie @ the12 niels jest dla gem install, moje jest dla bundle install. Jaki dokładnie masz problem, czy możesz opublikować błąd? Rozwiązanie, które opublikowałem, nadal działa dla mnie.
Alessandro Berardi
1
Zacząłem od próby bundle installrepozytorium zależnego od mysql. @ Rozwiązanie AlessandroBerardi nie działa dla mnie; @niels ”. : /
vergenzt
3
--with-cppflags wydaje się nie działać w najnowszym OSX. Uważam, że można to pominąć. bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay
36

Rozwiązaniem dla mnie była instalacja narzędzi wiersza poleceń Xcode.

Niedawno zaktualizowałem Xcode za pośrednictwem Mac App Store i za każdym razem, gdy to robię, stwierdziłem, że muszę ponownie zainstalować narzędzia wiersza poleceń.

xcode-select --install
Allen
źródło
36

Spróbuj tego:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

(Zaktualizuj odpowiednią wersję)

stereodenis
źródło
1
Biorąc pod uwagę, że biblioteka SSL nie została znaleziona, jest to właściwe podejście i działało dobrze.
TehJabbit
2
Pierwsza instalacja, brew install openssla potem gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include zadziałała dla mnie, dzięki!
Touseef Murtaza,
1
@TouseefMurtaza Twoja odpowiedź zadziałała dla mnie - dziękuję!
Jared,
👋 Drogi przyszłym ja. Teraz, gdy już dwukrotnie przeczytałeś tę odpowiedź. To rozwiązane w Twojej sytuacji! Teraz idź i zamień swój czas na kod, a kod na pieniądze.
DaveWoodall.com
28

Na podstawie rozwiązania tutaj

brew install openssl

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

Rozwiązać problem.

Gilg Him
źródło
1
exportnaprawdę pomaga. nawet z istniejącym openssl brakuje ścieżki.
Yakob Ubaidi
10

Dzięki @mudasobwa za wskazanie mi właściwego kierunku. Okazuje się, że błąd był spowodowany przez niepowiązany plik openssl, więc uruchomiono:

brew reinstall openssl && brew link openssl --force 

Rozwiązać problem. Rozwiązanie znalazłem tutaj: OpenSSL, RVM, Brew, konflikt błędu

zenvelope
źródło
2

Kombinacja poleceń rozwiązała to mnie. Jestem na Mojave.

brew reinstall openssl && brew link openssl --force

i wtedy

gem install mysql2 -v '0.4.10' -- \
  --with-ldflags=-L/usr/local/opt/openssl/lib \
  --with-cppflags=-I/usr/local/opt/openssl/include
Haseeb Zulfiqar
źródło
2

Po aktualizacji Homebrew ([email protected]) pojawiła się nowa ścieżka do bibliotek, więc można użyć:

bundle config build.mysql2 --with-opt-dir=$(brew --prefix openssl)
bundle install

To naprawi ld: library not found for -lssl error

Alexey Morozov
źródło
1

Wygląda na to, że brakuje Ci głównych plików potrzebnych do zbudowania mysql2klejnotu

sudo apt-get install libsqlite3-dev libmysqlclient-dev -y

libsqlite3-dev nie jest obowiązkowe, ale zainstaluj je, ponieważ jest to domyślny DB railsów.

Emad Saeed
źródło
-1

Okazało się, że muszę użyć --with-opt-dir=/usr/local/opt.

W szczególności dodałem do mojego ~/.bundle/configpliku:

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
Brian J. Fox
źródło