Fehler beim Versuch, die App mit mysql2 gem zu installieren

84

Ich versuche, eine Open Source Rails 3.2.21-Anwendung zu installieren, die das Gem verwendet mysql2, aber wenn ich versuche, den bundleCommant auszuführen, erhalte ich den folgenden Fehler:

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

Ich habe versucht, jede von mysqlmir über Homebrew installierte Version zu deinstallieren und neu zu installieren, wie folgt:

brew uninstall --force mysql && brew install mysql

Dann laufen:

sudo gem install mysql2

Wie aus einer Reihe ähnlicher Fragen hervorgeht, die hier gestellt werden, führt dies jedoch immer noch zu demselben Fehler wie oben.

Könnte jemand eine Anleitung geben, wie man dies zum Laufen bringt?

Zenvelope
quelle
Versuchen Sie, "Brew Doctor" auszuführen und prüfen Sie, ob Fehler vorliegen. Wenn ja, befolgen Sie die Anweisungen und versuchen Sie es erneut.
michniewicz
Haben Sie die Abhängigkeiten von gem installiert? github.com/brianmario/mysql2#general-instructions
lcguida
@ValAsensio, da stimme ich Ihnen von Herzen nicht zu. Ich denke, Sie sollten immer versuchen, Ihre Produktions-Datenbank, wenn möglich, in der Entwicklung zu verwenden. Ich verwende niemals SQLite in der Entwicklung und auch niemanden, mit dem ich zusammenarbeite.
Niels
@niels. Ja. Ich stimme dem zu. "Ich denke, Sie sollten immer versuchen, Ihre Produktionsdatenbank in der Entwicklung zu verwenden." Dieser alte Kommentar von mir war nutzlos. Ich habe es gelöscht.
Elvn

Antworten:

55

Das Fehlerprotokoll lautet:

ld: library not found for -lssl

Sie müssen also Folgendes installieren libssl:

brew install openssl

Wie in den Kommentaren erwähnt, muss der Pfad möglicherweise in die Bibliothek exportiert werden.

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Aleksei Matiushkin
quelle
27
Das war nicht genug, man muss es danach so exportieren:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Gilg Him
export LIBRARY_PATH = $ LIBRARY_PATH: / usr / local / opt / openssl / lib / `Funktioniert nach einem langen Versuch für mich. Danke!!
Abhi
161

Für alle, die das Problem noch haben:

Wenn Sie openssl über Brew installieren, sollte die folgende Meldung angezeigt werden:

Apple hat die Verwendung von OpenSSL zugunsten seiner eigenen TLS- und Kryptobibliotheken abgelehnt

Im Allgemeinen ergeben sich daraus keine Konsequenzen für Sie. Wenn Sie Ihre eigene Software erstellen und diese Formel benötigt, müssen Sie Ihre Build-Variablen hinzufügen:

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

Sie können diese Build-Flags (für die lokale Anwendung) setzen, indem Sie Folgendes ausführen:

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

Das hat bei mir funktioniert.

Siehe Bündler in der Dokumentation für weitere Informationen.

Alessandro Berardi
quelle
79
Wenn Sie nur verwenden möchten gem install, funktioniert Folgendes: 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 das sollte die Antwort sein ... Alessandro's funktioniert nicht in Sierra ("Warnung: Verweigerung der Verknüpfung: open ssl ..." -> etwas, das mit dem veralteten System von
openssl
2
@ the12 niels Lösung ist für gem install, meine ist für bundle install. Welches Problem tritt genau auf? Können Sie den Fehler veröffentlichen? Die Lösung, die ich gepostet habe, funktioniert immer noch für mich.
Alessandro Berardi
1
Ich habe versucht, bundle installein Repo zu finden, das von MySQL abhängt. @ AlessandroBerardis Lösung hat bei mir nicht funktioniert; @niels 'hat. : /
vergenzt
3
--with-cppflags scheint unter dem neuesten OSX zu brechen. Ich glaube, es kann weggelassen werden. bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay
36

Die Lösung für mich war die Installation der Xcode Command Line Tools.

Ich habe Xcode kürzlich über den Mac App Store aktualisiert und jedes Mal, wenn ich das tue, muss ich die Befehlszeilentools erneut installieren.

xcode-select --install
Allen
quelle
35

Versuche dies:

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

(Version entsprechend aktualisieren)

Stereodenis
quelle
1
Da die SSL-Bibliothek nicht gefunden wurde, ist dies der richtige Ansatz und hat für mich gut funktioniert.
TehJabbit
2
Erst installieren, brew install openssldann gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include für mich funktioniert, Danke!
Touseef Murtaza
1
@TouseefMurtaza Ihre Antwort hat bei mir funktioniert - danke!
Jared
👋 Liebes zukünftiges Selbst. Nachdem Sie diese Antwort jetzt zweimal gelesen haben. Dies ist es für Ihre Situation gelöst! Nun geh hinaus und tausche deine Zeit gegen Code und deinen Code gegen Geld.
DaveWoodall.com
28

Basierend auf der Lösung hier

brew install openssl

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

Problem gelöst.

Gilg ihn
quelle
1
das exporthilft wirklich. Auch bei vorhandenem openssl fehlt der Pfad.
Yakob Ubaidi
10

Danke @mudasobwa, dass du mich in die richtige Richtung gelenkt hast. Es stellt sich heraus, dass der Fehler durch eine nicht verknüpfte openssl-Datei verursacht wurde.

brew reinstall openssl && brew link openssl --force 

Problem gelöst. Ich habe hier die Lösung gefunden: OpenSSL, RVM, Brew, Konfliktfehler

Zenvelope
quelle
2

Die Kombination von Befehlen hat es mir gelöst. Ich bin auf Mojave.

brew reinstall openssl && brew link openssl --force

und dann

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
quelle
2

Nach dem Homebrew-Update ([email protected]) gibt es einen neuen Pfad für libs. Verwenden Sie daher Folgendes:

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

Es wird behoben ld: library not found for -lssl error

Alexey Morozov
quelle
1

Scheint, dass Sie die Hauptdateien vermissen, die zum Erstellen von mysql2Gem benötigt werden

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

libsqlite3-dev ist nicht obligatorisch, aber installieren Sie es, da es sich um die Standard-Rails-Datenbank handelt.

Emad Saeed
quelle
-1

Ich fand, dass ich verwenden musste --with-opt-dir=/usr/local/opt.

Insbesondere habe ich meiner ~/.bundle/configDatei Folgendes hinzugefügt :

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
Brian J. Fox
quelle