Ошибки при установке gem mysql2 через Bundler - PullRequest
61 голосов
/ 20 сентября 2010

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

** executing command
/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/installer.rb:483:in 'rescue in block in build_extensions': 
ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError)

/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-mysql-config=/usr/bin/mysql_config
checking for rb_thread_blocking_region()... yes
checking for mysql.h... no
checking for mysql/mysql.h... no

-----
mysql.h is missing.  please check your installation of mysql and try again.
-----

*** 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=/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby
--with-mysql-config
Gem files will remain installed for inspection.

Большинство вещей, которые я нашел через Googling, рекомендовали передать параметр --with-mysql-config, чтобы исправитьЭто.Итак, основываясь на:

$ which mysql_config
/usr/bin/mysql_config

, я добавил следующее в конфигурацию Bundler:

$ bundle config build.mysql2 --with-mysql-config='/usr/bin/mysql_config'

Однако, все равно не повезло - тот же сбой, что и выше.Так как он умирает с ошибкой mysql.h is missing, я проверил это, и якобы он есть, но Бандлер не может его найти.

$ find / -name mysql.h
/usr/include/mysql5/mysql/mysql.h

Есть мысли?

Ответы [ 9 ]

95 голосов
/ 21 сентября 2010

Ответ был похож на тот, который опубликовал Вриккен - вот что я сделал, чтобы исправить это ради будущих читателей.

(Это для RHEL 5.5 - аналогичные, но разные команды применяются для Ubuntu / Debian / и т. Д.)

Выполнение sudo yum list installed распечатает все установленные пакеты на вашем компьютере (примечание: yum на RHEL требует, чтобы вы добавили репозиторий Red Hat Network [я использую EPEL ] и запустили его через sudo).

У меня были mysql и mysql-server, что объясняло, почему MySQL работал нормально для каждого существующего приложения, но не mysql-devel, что необходимо для исправления этой ошибки mysql.h is missing и других подобных ошибок сборки.

Короче говоря, после mysqldump -u root -ppassword --all-databases > full-dump.sql для безопасности это было исправлено простым

sudo yum install mysql-devel
33 голосов
/ 10 октября 2010

Для Ubuntu необходимо установить следующее. libmysqlclient-DEV libmysqlclient16

20 голосов
/ 23 июня 2013

Для Mac с установкой mysql brew следующее решение устранило проблему для меня:

Я отредактировал файл mysql_config в /usr/local/Cellar/mysql/5.6.12/bin и удалил Wопции -compiler -Wno-null-translation и -Wno-unused-private-field для cflags и cxxflags.

Это решило проблему с "gem install mysql2".

Ссылка: http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

8 голосов
/ 22 августа 2012

Данная проблема возникнет из-за того, что пакет mysql-devel неправильно установлен в вашей системе. Я буду объяснять то же самое в Centos о том, как это исправить. Когда вы пытаетесь установить этот пакет, используя,

    yum install mysql-devel

иногда происходит столкновение с существующими пакетами, которые устанавливаются при установке MySql-Administrative tool и браузера запросов MySQL.

В этом случае вам необходимо удалить все существующие пакеты mysql2 и установить его снова.

    rpm -qa -last | grep -i mysql
    yum remove MySQL-server-5.5.27-1.rhel5
    yum remove MySQL-client-5.5.27-1.rhel5
    yum remove mysql-gui-tools-5.0r12-1rhel4
    yum remove mysql-query-browser-5.0r12-1rhel4-a

Таким образом, вы можете удалить все отображаемые объекты mysql с помощью rpm -qa, как указано выше.

Затем вы можете установить mysql-сервер и mysql-клиент.

    yum install mysql-server
    yum install mysql-client

Теперь вы делаете установку пакета mysql-devel.

    yum install mysql-devel

Теперь нет столкновений пакетов, и вы можете установить gem mysql2.

    gem install mysql2 -v '0.3.11'

Теперь ваш mysql2 гем будет успешно установлен, и вы готовы к работе.

1 голос
/ 30 марта 2017

Я получил ту же ошибку.и для Ubuntu 16. Я должен был написать ниже команду:

sudo apt-get install libmysqlclient-dev 

, и она работает обратно.

1 голос
/ 04 июня 2013

В моем случае проблема была в неправильном сценарии mysql_config.При вызове из командной строки с параметром --cflags возвращается строка параметров, содержащая:

-Xclang -target-feature -Xclang -aes -Qunused-arguments

По какой-то причине вызов метода have_header ('mysql.h') в сценарии extconf.rbпотерпит неудачу, если эти опции будут включены.

Для меня сработало ручное редактирование файла mysql_config, удалив ссылку на эти опции из строки:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -Xclang -target-feature -Xclang -aes -Qunused-arguments  -O2 -g -DDBUG_OFF " #note: end space!

, которую я переписал как:

cflags="-I$pkgincludedir -Os -w -pipe -march=native  -O2 -g -DDBUG_OFF " #note: end space!
0 голосов
/ 29 марта 2018

На моем Ubuntu 16.04.4 LTS работает mysql Ver 15.1 Distrib 10.0.34-MariaDB, для debian-linux-gnu (x86_64) с использованием readline 5.2 , сработало следующее:

sudo apt-get install libmariadb-client-lgpl-dev

Я видел, что в сообщении об ошибке текущего установщика предлагается запустить

apt-get install libmysqlclient-dev

Это также может работать.

0 голосов
/ 02 апреля 2016

Я столкнулся с этой проблемой при установке комплекта для redmine на fedora 23. Я нашел решение, выполнив эту команду - sudo dnf install redhat-rpm-config.

Исправлена ​​не только моя проблема с установкой mysql2, но и для nokogiri и redcarpet.

0 голосов
/ 29 марта 2012

Я знаю, что это древнее, но если кто-то все еще получает эту ошибку zlib, убедитесь, что вы ввели: рвм использовать

(какую бы версию вы не использовали)

Я мог бы поклясться, что сделал это. Просто отправлять сообщения на случай, если кто-нибудь выдернет свои волосы, и это поможет. Если не удачи. :)

...