Отсутствует mysql.h.... (Ruby on Rails, OSX)

Я попробовал несколько идей... ни одна из них не сработала... Я просто пытаюсь установить mysql2 как драгоценный камень. Мой mysql работает, но каждый раз, когда моя система говорит, что mysql.h отсутствует... У кого-то есть идея? Это очень расстраивает сейчас...

Я использую osx 10.8.3, ruby ​​1.9.3, rails 3.2.13 и home-brew.

    gem install mysql2 -v '0.3.11'
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

        /Users/gadreel/.rvm/rubies/ruby-1.9.3-p429/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... yes
checking for rb_wait_for_single_fd()... 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
    --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=/Users/gadreel/.rvm/rubies/ruby-1.9.3-p429/bin/ruby
    --with-mysql-config
    --without-mysql-config

    file `which mysql`
    /usr/local/mysql/bin/mysql: Mach-O 64-bit executable x86_64

3 ответа

Решение

Использование менеджера пакетов, такого как Homebrew или MacPorts, позволяет довольно просто это исправить. Бинарный дистрибутив MySQL напрямую из Oracle и тот, который связан с самой OS X, не имеет заголовков разработки, из которых mysql.h это один из них.

Доморощенный бы исправить это так:

brew install mysql

MacPorts очень похож:

sudo port install mysql

Обе из них устанавливают библиотеки, клиент командной строки и связанные заголовки разработки для библиотек. Включение сервера не является обязательным.

В качестве альтернативы вы можете получить источник напрямую от Apple и установить его любым удобным для вас способом.

Вообще Homebrew - это лучший способ.

Для меня в установке Mountain Lion Rails (с использованием Homebrew и RVM) у меня было редактирование /usr/local/Cellar/mysql/5.XX.XX/bin/mysql_config и удаление -Wno-null-conversion -Wno-unused-private-field из вариантов cxflags и cxflags следующим образом:

До:

cflags="-I$pkgincludedir  -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Wno-null-conversion -Wno-unused-private-field -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!

После:

cflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!
cxxflags="-I$pkgincludedir  -Wall -Os -g -fno-strict-aliasing -DDBUG_OFF " #note: end space!

После этого установка gem mysql2 прошла без сбоев

Примечание: это, вероятно, связано с изменением, внесенным в mysql_config после 5.6.10: http://bugs.mysql.com/bug.php?id=69645

Установка драгоценного камня иногда включает компиляцию исходного кода. В этом случае гему MySQL необходимо создать интерфейс ruby ​​путем компиляции кода C - вам, скорее всего, нужно установить файлы разработки MySQL.

(пропустил ссылку на OSX ранее)

Вам необходимо установить заголовки для разработки для mysql, используя brew, вам может потребоваться установить более раннюю версию, чем 8, поскольку некоторые файлы заголовков удалены из этого дистрибутива. Например,my_global.h удаляется, поэтому, если в коде используется этот заголовок, вам придется установить более раннюю версию, чем 8.

Зависимости файла заголовка

Мы начали очистку зависимостей файлов заголовков, то есть работу над "включением того, что вы используете" и реорганизацией файлов заголовков для удаления зависимостей сборки. Мы исправили неоднозначные пути включения; почти все теперь должно быть от корня. Инкрементальность сильно увеличилась после того, как, например, my_global.h исчез, а sql_class.h также немного уменьшился в весе. Поставляемые заголовки клиентов являются самодостаточными и гораздо более разумными. Например, заголовки клиентов теперь не зависят от платформы (нет разницы между 32- и 64-разрядными версиями Linux).

brew install mysql@5.7 mysql-client@5.7

Если вы используете стандартный XAMPP, это может быть проблемой, возможно, вам потребуется установить xampp-devel, который является пакетом разработки для xampp, этот дистрибутив содержит заголовки mysql. *.hфайлы, а также другие связанные источники, вы можете найти более старые версии здесь.

вы можете чем скопировать include каталог в вашем /Applications/XAMPP/xamppfiles затем установите гем с помощью этой команды:

sudo gem install mysql2 -v 0.3.21 -- --with-mysql-config=/Applications/XAMPP/xamppfiles/bin/mysql_config --with-mysql-include=/Applications/XAMPP/xamppfiles/lib/include/ --no-ri --no-rdoc

эта версия работала для меня, и не нужно включать --with-mysql-dir если вы укажете mysql_config path, и тогда вы должны получить аналогичный результат:

This could take a while...
Successfully installed mysql2-0.3.21
Parsing documentation for mysql2-0.3.21
Installing ri documentation for mysql2-0.3.21
Done installing documentation for mysql2 after 0 seconds
1 gem installed

вам также может потребоваться предоставить рельсы с правильной версией libmysqlclient, вот пример использования Symlink:

sudo ln -s /Applications/XAMPP/xamppfiles/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Не забывайте в пакетах обновлений.

Другие вопросы по тегам