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

84

Я пытаюсь установить приложение 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

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

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

зенверт
источник
попробуйте запустить "brew doctor" и проверьте, нет ли ошибок. Если да, следуйте инструкциям и попробуйте еще раз.
KM
Вы установили зависимости гема? github.com/brianmario/mysql2#general-instructions
lcguida
@ValAsensio, я полностью с вами не согласен, я думаю, вам всегда следует стараться использовать свою производственную базу данных в разработке, если это возможно. Я никогда не использую sqlite в разработке и не работаю ни с кем.
Нильс
@niels. Да. Я согласен с этим: «Я думаю, вы всегда должны пытаться использовать свою производственную базу данных в разработке». Этот мой древний комментарий был бесполезен. Я удалил это.
Elvn

Ответы:

55

Журнал ошибок говорит:

ld: library not found for -lssl

Итак, вам необходимо установить libssl:

brew install openssl

Как было указано в комментариях, возможно, потребуется экспортировать путь к библиотеке.

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Алексей Матюшкин
источник
27
Этого было недостаточно, нужно было экспортировать это потом вот так:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Гилг Хим
export LIBRARY_PATH = $ LIBRARY_PATH: / usr / local / opt / openssl / lib / `Работает у меня после долгой попытки. Спасибо!!
Abhi
162

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

Когда вы устанавливаете 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"

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

См . Дополнительную информацию в документации сборщика .

Алессандро Берарди
источник
79
Если вы просто хотите использовать gem install, работает следующее: 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, который должен быть ответом ... Алессандро не работает на Sierra («Предупреждение: отказ от ссылки: open ssl ...» -> что-то связано с устаревшей системой openssl)
12
2
Решение @ the12 niels для gem install, мое для bundle install. С какой именно проблемой вы столкнулись, можете ли вы опубликовать ошибку? Решение, которое я опубликовал, все еще работает для меня.
Алессандро Берарди,
1
Я начал с попытки bundle installсоздать репо, зависящее от mysql. Решение @ AlessandroBerardi не сработало для меня; @niels 'сделал. : /
vergenzt
3
--with-cppflags, похоже, не работает в последней версии OSX. Я считаю, что это можно опустить. bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay
36

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

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

xcode-select --install
Аллен
источник
36

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

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

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

стереоденис
источник
1
Учитывая, что библиотека SSL не была найдена, это правильный подход, и он отлично работал у меня.
TehJabbit
2
Сначала уложите brew install opensslзатем gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include работал для меня, спасибо!
Touseef Murtaza
1
@TouseefMurtaza, ваш ответ сработал для меня - спасибо!
Джаред
👋 Дорогой будущий я. Теперь, когда вы прочитали этот ответ дважды. Это решено для вашей ситуации! Теперь идите и обменяйте свое время на код и свой код на деньги.
DaveWoodall.com
28

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

brew install openssl

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

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

Гилг Его
источник
1
exportдействительно помогает. даже с существующим openssl путь отсутствует.
Якоб Убайди
10

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

brew reinstall openssl && brew link openssl --force 

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

зенверт
источник
2

Комбинация команд решила это меня. Я в Мохаве.

brew reinstall openssl && brew link openssl --force

а потом

gem install mysql2 -v '0.4.10' -- \
  --with-ldflags=-L/usr/local/opt/openssl/lib \
  --with-cppflags=-I/usr/local/opt/openssl/include
Хасиб Зульфикар
источник
2

После обновления Homebrew (openssl@1.1) есть новый путь для библиотек, поэтому можно использовать:

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

Это исправит ld: library not found for -lssl error

Алексей Морозов
источник
1

Похоже, вам не хватает основных файлов, необходимых для создания mysql2гема.

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

libsqlite3-dev не является обязательным, но установите его, поскольку это база данных rails по умолчанию.

Эмад Саид
источник
-1

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

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

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
Брайан Дж. Фокс
источник