Подтвердить что ты не робот

Ошибка при попытке установить приложение с помощью mysql2 gem

Я пытаюсь установить приложение с открытым исходным кодом rails 3.2.21, использующее камень mysql2, но когда я пытаюсь запустить комманду bundle, я получаю следующую ошибку:

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

Я попытался удалить каждую версию mysql, которую я установил через homebrew, и переустановить их, например:

brew uninstall --force mysql && brew install mysql

Затем выполняется:

sudo gem install mysql2

Как было предложено рядом похожих вопросов, но это все равно приводит к той же ошибке, что и выше.

Пожалуйста, может кто-нибудь предложить руководство по его запуску?

4b9b3361

Ответ 1

В журнале ошибок говорится:

ld: library not found for -lssl

Итак, вам нужно установить libssl:

brew install openssl

Надеюсь, что это поможет.

Ответ 2

Для всех, кто по-прежнему испытывает проблему:

Когда вы устанавливаете openssl через brew, вы должны получить следующее сообщение:

Apple отказалась от использования OpenSSL в пользу своих собственных TLS и криптографических библиотек

Как правило, никаких последствий для вас нет. Если вы собственного программного обеспечения, и для этого требуется эта формула, вам нужно добавить строить переменные:

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

Вы можете установить эти флаги сборки (для локального приложения), выполнив следующее:

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

Это сработало для меня.

Подробнее см. документацию поставщика.

Ответ 3

Решение для меня заключалось в установке инструментов командной строки Xcode.

Недавно я обновил Xcode через Mac App Store, и каждый раз, когда я это делаю, я обнаружил, что мне нужно снова установить средства командной строки.

xcode-select --install

Ответ 4

Попробуй это:

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

(Обновите версию по мере необходимости)

Ответ 5

Спасибо @mudasobwa за то, что указали мне в правильном направлении. Оказывается, ошибка была вызвана несвязанным файлом openssl, поэтому работает:

brew reinstall openssl && brew link openssl --force 

Решил проблему. Я нашел решение здесь: OpenSSL, RVM, Brew, конфликтующая ошибка

Ответ 7

На основании решения здесь

brew install openssl

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

решил проблему.

Ответ 8

Я обнаружил, что мне нужно использовать --with-opt-dir=/usr/local/opt.

В частности, я добавил следующее в мой файл ~/.bundle/config:

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"