demetrius2003
@demetrius2003

Gem install mysql error. Как же установить?

Решил немного в Руби освоиться. Честно говоря, первое знакомство - не очень! Сейчас вот застрял на следующем. Беру чистую ОС (пробовал Ubuntu 16 и 18 версий). Ставлю Руби и СУБД (пробовал MySQL и MariaDB). Пытаюсь добавить поддержку для MySQL в Ruby. И полный провал!
apt update
apt install ruby-full
apt install mariadb-server
gem install mysql

ошибка:
Fetching: mysql2-0.5.3.gem (100%)
Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

    current directory: /var/lib/gems/2.5.0/gems/mysql2-0.5.3/ext/mysql2
/usr/bin/ruby2.5 -r ./siteconf20191211-3351-hskd8h.rb extconf.rb
checking for rb_absint_size()... *** 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
        --without-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=/usr/bin/$(RUBY_BASE_NAME)2.5
/usr/lib/ruby/2.5.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
        from /usr/lib/ruby/2.5.0/mkmf.rb:541:in `try_link0'
        from /usr/lib/ruby/2.5.0/mkmf.rb:559:in `try_link'
        from /usr/lib/ruby/2.5.0/mkmf.rb:770:in `try_func'
        from /usr/lib/ruby/2.5.0/mkmf.rb:1057:in `block in have_func'
        from /usr/lib/ruby/2.5.0/mkmf.rb:947:in `block in checking_for'
        from /usr/lib/ruby/2.5.0/mkmf.rb:350:in `block (2 levels) in postpone'
        from /usr/lib/ruby/2.5.0/mkmf.rb:320:in `open'
        from /usr/lib/ruby/2.5.0/mkmf.rb:350:in `block in postpone'
        from /usr/lib/ruby/2.5.0/mkmf.rb:320:in `open'
        from /usr/lib/ruby/2.5.0/mkmf.rb:346:in `postpone'
        from /usr/lib/ruby/2.5.0/mkmf.rb:946:in `checking_for'
        from /usr/lib/ruby/2.5.0/mkmf.rb:1056:in `have_func'
        from extconf.rb:25:in `<main>'

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/mysql2-0.5.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /var/lib/gems/2.5.0/gems/mysql2-0.5.3 for inspection.
Results logged to /var/lib/gems/2.5.0/extensions/x86_64-linux/2.5.0/mysql2-0.5.3/gem_make.out

Перепробовал абсолютно все рецепты, что есть в интернете! build-essential zlib1g-dev libyaml-dev libssl-dev libgdbm-dev libreadline-dev libncurses5-dev libffi-dev curl openssh-server redis-server checkinstall libxml2-dev libxslt-dev libcurl4-openssl-dev libicu-dev logrotate поставлены! Я уже потратил несколько суток на решение и так и не добился успеха! В сети же подобные вопросы аж десятилетней давности! Неужели за это время эту какашку так и не починили!? Это работало везде, что бы я ни пробовал. В PHP, в Perl, в Windows с его технологиями (и .NET и чужеродный Delphi). Ни разу я в самом начале пути не натыкался на подобное непреодолимое препятствие! Как победить проблему то?
  • Вопрос задан
  • 2284 просмотра
Пригласить эксперта
Ответы на вопрос 3
Попробуй:
sudo apt-get install build-essential patch
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev

Рубин лучше ставить через rbenv или rvm
Ответ написан
Комментировать
1. А сам MySQL у вас установлен? Дело в том, что gem mysql не совсем полноценный клиент, это скорее обёртка над системной библиотекой для работы с MySQL.
2. Попробуйте установить более современную библиотеку `gem install mysql2`, а не `gem install mysql`.
3. Каким образом вы устанавливали сам Ruby? Через менеджер или нативно? Попробуйте убрать Ruby и установить, например, через RVM.
Ответ написан
Комментировать
demetrius2003
@demetrius2003 Автор вопроса
1. Да вроде выше я всё написал! Мускуль ставил так:
apt install mariadb-server
или так:
apt install mysql-server
пробовал разные варианты. Потому как натыкался на пост, что сам mysql начиная с версии 5.7 что-то там не того и неплохо бы пользовать Марию. Но к успеху это не привело.
P.S.: Я понимаю, что это обёртка! Мне то она и нужна, чтоб примеры для Руби и SQL попробовать!
2. Забыл добавить! gem install mysql2 тоже пробовал, как один из вариантов решения проблемы. Для меня он так же ничего не поменял! (Разве что ошибка малость другая).
3. Руби ставил просто:
apt install ruby-full
изначально не хотелось избыточности! Никакие Рельсы, РВМ и прочее мне по сути не нужны! Правда в одном из вариантов делал что-то подобное:
gem install rails
Оно прям долго мозгами скрипело, но в результате отработало без ошибок. Но, как говорят англичане, виз но лак! gem install mysql так и не получилось!

UPD1: В очередной раз снёс всё. На чистую Убунту установил gpg и mysql. Потом rvm (по инструкции, без отсебятины). Из rvm установил Руби (опять же по инструкции https://rvm.io/rvm/install). Снова пробую gem install mysql. Ошибка теперь такая:
Building native extensions. This could take a while...
ERROR:  Error installing mysql:
        ERROR: Failed to build gem native extension.

    current directory: /usr/share/rvm/gems/ruby-2.6.3/gems/mysql-2.9.1/ext/mysql_api
/usr/share/rvm/rubies/ruby-2.6.3/bin/ruby -I /usr/share/rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0 -r ./siteconf20191211-4210-8d232p.rb extconf.rb
checking for mysql_query() in -lmysqlclient... no
checking for -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
checking for -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** 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
        --without-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=/usr/share/rvm/rubies/ruby-2.6.3/bin/$(RUBY_BASE_NAME)
        --with-mysql-config
        --without-mysql-config
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include
        --without-mysql-include=${mysql-dir}/include
        --with-mysql-lib
        --without-mysql-lib=${mysql-dir}/lib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-mlib
        --without-mlib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-zlib
        --without-zlib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-socketlib
        --without-socketlib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-nsllib
        --without-nsllib
        --with-mysqlclientlib
        --without-mysqlclientlib
        --with-mygcclib
        --without-mygcclib
        --with-mysqlclientlib
        --without-mysqlclientlib

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /usr/share/rvm/gems/ruby-2.6.3/extensions/x86_64-linux/2.6.0/mysql-2.9.1/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /usr/share/rvm/gems/ruby-2.6.3/gems/mysql-2.9.1 for inspection.
Results logged to /usr/share/rvm/gems/ruby-2.6.3/extensions/x86_64-linux/2.6.0/mysql-2.9.1/gem_make.out

Сам mkmf.log теперь под 100 Кб. Не знаю, есть ли смысл сюда всё это выкладывать?

UPD2: Прошло несколько суток "изучения". На этом эксперименты заканчиваю. Больше не имею морального права тратить время на Это. Жизнь то не резиновая! Если оно на элементарных вещах требует таких трудозатрат, то нафиг нафиг! Этим надо заниматься, когда у тебя сломаны обе ноги и ты лежишь в больнице и тебе надо скоротать время и вобщем то особо нечем заняться. Печалька!

UPD3: Для таких же бедолаг, как и я. mysql победить не удалось, но mysql2 вроде победим. Итак. Чистая Убунта 18.04. Делаем раз:
apt update
apt install mc
apt install gpg
apt install mysql-server
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
apt-get install software-properties-common
apt-add-repository -y ppa:rael-gc/rvm
apt-get update
apt-get install rvm
reboot
rvm install ruby
apt install libmysqlclient-dev
gem install mysql2
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы