Хобрук: Ваш путь к мастерству в программировании

Почему я не могу установить гем mysql2?

Моя ОС — Red Hat Enterprise Linux Server 7.4 (Maipo), архитектура процессора — x86_64, а порядок байтов — Little Endian.

Я делал bundle install для своего приложения rails, но получаю

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'` succeeds before bundling.

и выполнение gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/' дает мне:

Building native extensions. This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    current directory: /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10/ext/mysql2
/home/my-user-name/.rvm/rubies/ruby-2.4.4/bin/ruby -r ./siteconf20180704-8600-mkihlj.rb extconf.rb
checking for rb_absint_size()... yes
checking for rb_absint_singlebit_p()... yes
checking for ruby/thread.h... yes
checking for rb_thread_call_without_gvl() in ruby/thread.h... yes
checking for rb_thread_blocking_region()... no
checking for rb_wait_for_single_fd()... yes
checking for rb_hash_dup()... yes
checking for rb_intern3()... yes
checking for rb_big_cmp()... yes
-----
Using mysql_config at /usr/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for SSL_MODE_DISABLED in mysql.h... no
checking for MYSQL_OPT_SSL_ENFORCE in mysql.h... yes
checking for MYSQL.net.vio in mysql.h... no
checking for MYSQL.net.pvio in mysql.h... yes
checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes
-----
Setting libpath to /usr/lib64/
-----
creating Makefile

current directory: /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10/ext/mysql2
make "DESTDIR=" clean

current directory: /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10/ext/mysql2
make "DESTDIR="
compiling client.c
In file included from ./mysql2_ext.h:35:0,
                 from client.c:1:
client.c: In function ‘rb_set_ssl_mode_option’:
./client.h:56:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   mysql_client_wrapper *wrapper; \
   ^
client.c:118:3: note: in expansion of macro ‘GET_CLIENT’
   GET_CLIENT(self);
   ^
client.c:119:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   int val = NUM2INT( setting );
   ^
client.c:145:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
client.c: At top level:
cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default]
compiling infile.c
compiling mysql2_ext.c
compiling result.c
result.c: In function ‘rb_mysql_result_alloc_result_buffers’:
result.c:326:40: warning: assignment from incompatible pointer type [enabled by default]
     wrapper->result_buffers[i].is_null = &wrapper->is_null[i];
                                        ^
result.c:328:40: warning: assignment from incompatible pointer type [enabled by default]
     wrapper->result_buffers[i].error   = &wrapper->error[i];
                                        ^
result.c: At top level:
cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default]
compiling statement.c
statement.c: In function ‘rb_raise_mysql2_stmt_error’:
statement.c:50:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   VALUE rb_error_msg = rb_str_new2(mysql_stmt_error(stmt_wrapper->stmt));
   ^
statement.c:57:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   rb_encoding *default_internal_enc = rb_default_internal_encoding();
   ^
In file included from ./mysql2_ext.h:35:0,
                 from statement.c:1:
statement.c: In function ‘execute’:
./client.h:56:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   mysql_client_wrapper *wrapper; \
   ^
statement.c:273:3: note: in expansion of macro ‘GET_CLIENT’
   GET_CLIENT(stmt_wrapper->client);
   ^
statement.c:405:13: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
             VALUE rb_val_as_string = rb_funcall(argv[i], intern_to_s, 0);
             ^
In file included from ./mysql2_ext.h:35:0,
                 from statement.c:1:
statement.c: In function ‘fields’:
./client.h:56:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
   mysql_client_wrapper *wrapper; \
   ^
statement.c:481:3: note: in expansion of macro ‘GET_CLIENT’
   GET_CLIENT(stmt_wrapper->client);
   ^
statement.c: At top level:
cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default]
cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default]
linking shared-object mysql2/mysql2.so
/usr/bin/ld: cannot find -lmariadb
collect2: error: ld returned 1 exit status
make: *** [mysql2.so] Error 1

make failed, exit code 2

Gem files will remain installed in /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10 for inspection.
Results logged to /home/my-user-name/.rvm/gems/ruby-2.4.4/extensions/x86_64-linux/2.4.0/mysql2-0.4.10/gem_make.out

Я прочитал этот пост,

но выполнение sudo yum install mysql-devel дает:

Loaded plugins: search-disabled-repos

Package MariaDB-devel-10.3.8-1.el7.centos.x86_64 already installed and latest version
Nothing to do

хотя запуск sudo yum list installed mysql-devel дает:

Loaded plugins: search-disabled-repos
Error: No matching Packages to list

Это странно.

Раньше я устанавливал MariaDB, выполнив следующие 2 шага:

Шаг 1:

sudo vi /etc/yum.repos.d/MariaDB.repo

Содержание его такое:

# MariaDB 5.5 RedHat repository list - created 2018-07-04 03:54 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Шаг 2:

sudo yum install MariaDB-server MariaDB-client

И я начал это : sudo service mysql start

Как я могу успешно установить гем mysql2?


  • вам не хватает библиотек, необходимых для драгоценного камня mysql. сначала установите их, а затем сделайте пакет 04.07.2018
  • @Bijendra Как узнать, какие библиотеки отсутствуют и как их установить? я думал, что gem install справится с этим автоматически для меня, а для части, которую он не может получить, он скажет мне. Но, видимо, я не знаю, где это искать, или такой функции не существует. 04.07.2018
  • возможный дубликат stackoverflow.com/questions/45474191/ 04.07.2018
  • Привет @Emu, в своем посте я упомянул, что пост, который вы только что упомянули, не работает. 04.07.2018
  • Библиотеки не устанавливаются автоматически с помощью gem, они устанавливаются на системном уровне, в то время как gems можно установить на уровне проекта, например. драгоценный камень 04.07.2018
  • Привет @Bijendra Знаете ли вы, как можно проверить, какая библиотека отсутствует и как их установить? Например, в этом случае. 04.07.2018
  • Следуйте этому: digitalocean.com/community/tutorials/ . Centos/RHE похожи в использовании команд 04.07.2018
  • yum install MariaDB-shared решает мою проблему 04.07.2018

Ответы:


1

Первый забег

sudo apt-get install libmysqlclient-dev

Or

yum install mysql-devel

тогда

bundle install
04.07.2018
  • Для yum install mysql-devel, как я уже упоминал в своем исходном посте, это не работает. 04.07.2018
  • @HenryYang, вероятно, это brew install libmysqlclient-dev для mac os. давай попробуем. 04.07.2018
  • Моя ОС — Red Hat Enterprise Linux Server 7.4 (Maipo), и я использовал yum для установки mariadb. Я не знаю, доступен ли brew в моей ОС, но я полагаю, что лучше придерживаться одного менеджера пакетов? 04.07.2018
  • Brew доступен только для OSX. 04.07.2018
  • @Aman Ошибка: нет доступной формулы или бочки с именем libmysqlclient-dev 21.04.2021

  • 2

    У меня была такая же проблема, и этот ответ на вопрос mysql2 работал для меня. Установка mysql-devel у меня не сработала.

    Их ответ и то, что сработало для меня… yum install MariaDB-shared.

    Приложение: я устанавливал mysql2 v0.5.2 вместе с MariaDB 10.3.9.

    19.09.2018
    Новые материалы

    Расистский и сексистский робот, обученный в Интернете
    Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

    Управление состоянием в микрофронтендах
    Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..