Помилка встановлення Ruby gem mysql2


76

Коли я намагаюся встановити самоцвіт mysql2, він не вдається без явних помилок. Хтось знає, що робити, щоб обійти це, так що mysql2 встановлюється?

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

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -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=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    --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


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/ext/mysql2/gem_make.out

Відповіді:


29

На вашому комп'ютері має бути встановлений 64-розрядний MySQL, а також інструменти побудови, які ви отримуєте при встановленні xcode.


3
Це вирішило. Встановив 64-розрядний MySQL на моєму комп'ютері за посиланням нижче, і все працювало нормально. Дякую!
— Таннер

18
так - brew install mysqlі тоді gem install mysql без проблем - thx!
— froderik

147

Ubuntu:

sudo apt-get install libmysqlclient-dev  #(mysql development headers)
sudo gem install mysql2 -- --with-mysql-dir=/etc/mysql/

Це воно!

Результат:

Building native extensions. This could take a while...
Successfully installed mysql2-0.2.6
1 gem installed
Installing ri documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Result not known
Enclosing class/module 'mMysql2' for class Client not known
Installing RDoc documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Result not known
Enclosing class/module 'mMysql2' for class Client not known

3
На жаль, apt ще не доступний на OSX. Але ваш підхід справді працює на Debian / Ubuntu.
— Holger Just

6
Я не розумію, як це має стільки голосів, коли це не відповідає питанню.
— WattsInABox

19
У ньому так багато голосів, тому що інші (як і я) знайшли це корисним. Це вирішило моє питання.
— Джон

2
Випуск та сама проблема, але в іншій ОС
— Абе Петрілло,

6
Будь ласка, не те, що на Ubuntu 13, принаймні, вам не потрібно вказувати with-mysql-dir. Просто встановіть, libmysqlclient-devа потім запустіть, bundle installі це повинно працювати.
— Джош М.

41

Вам потрібні заголовки розробки MySQL для mysql2, щоб правильно їх скомпілювати. Це потрібно, оскільки більша частина функціональних можливостей написана на мові C і згодом пов'язана з MySQL.

Рішення полягає в тому, щоб вказати інсталятору дорогоцінного каменя на вашу папку встановлення mysql явно так

gem install mysql2 -- --with-mysql-dir=/usr/local/mysql
# or where ever you installed your mysql server to

або встановивши сервер mysql у відоме місце (наприклад, використовуючи homebrew .), а потім встановивши самоцвіт

# install the mysql server locally
brew install mysql
# install the gem
gem install mysql2

Обидва підходи вимагають встановлення XCode, щоб мати необхідний компілятор GCC.


Розчин для заварювання для мене працював найкраще. Якщо ви встановлюєте двійковий файл Mac OS X MySQL, обов’язково використовуйте 64-бітну версію.
— Джейсон

Дякую, --with-mysql-dir=варіант був саме тим, що мені потрібно, щоб вирішити свою проблему.
— Тобіас Коен,

Для мене це --with-mysql-dirнасправді викликало проблему. Я просто залишив це і дозволив встановити його в каталог за замовчуванням. Я просто встановив конкретну версію за допомогоюgem install mysql2 -v '0.3.18'
— user2490003

Дякуємо: Це спрацювало для мене: ==> sudo gem install mysql2 - --with-mysql-dir = / usr / local / mysql
— Arunabh Das

25

З встановленими Brew та MySQL я використав наступне, щоб встановити самоцвіт mysql2

gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.5.10/bin/mysql_config

Якщо ви використовуєте Bundler, ви можете повідомити Bundler про це за допомогою команди:

bundle config build.mysql2 --with-mysql-config=/usr/local//Cellar/mysql/5.5.10/bin/mysql_config

Як задокументовано тут: http://gembundler.com/man/bundle-config.1.html


1
Це також працює, якщо ви використовуєте версії brew для встановлення старих версій, наприклад, brew install mysql51, gem install mysql2 -v '0.3.13' - --with-mysql-config = / usr / local / Cellar / mysql51 / 5.1 .71 / bin / mysql_config (на гірському леві)
— nruth

єдине рішення цієї дивної проблеми в MacOS!
— kevinluo201


6

Ubuntu 15.04:

sudo apt-get install libmysqlclient-dev
sudo gem install mysql2

Ubuntu-16.04:

sudo apt-get install ruby-mysql2
sudo gem install mysql2

Вихід:

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

2

Можливо, ви захочете перевірити цю тему на веб-сайті MySQL: http://forums.mysql.com/read.php?116,178217,178217 , зокрема відповідь Скотта Дерріка: http://forums.mysql.com/ read.php? 116,178217,189357 # msg-189357

Щоб бути більш конкретним, спробуйте використовувати

sudo gem install mysql2 -- --with-mysql-dir=/usr/local/mysql

Сподіваюся, що це допомагає.


1

Я перекопав Інтернет та переповнення стека на 2 дні, і лише тоді, коли я знайшов це посилання, а потім почав працювати через цей квиток для mysql2 , насправді вирішив проблему.

З моїм налаштуванням (як пояснюється в квитку), перемикачі компілятора -Wno-null-conversion -Wno-unused-private-field зламаються і дадуть мені помилку, яка була не зовсім правильною, а саме:

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

1

Я вирішив це, вказавши конкретно, де знаходяться каталоги, не потрібно нічого перевстановлювати визначивши, де знаходяться , за допомогою brew чи macports чи що завгодно, просто вказавши, де є речі (лише одне: рубін на моєму mac був встановлений за допомогою rvm, я не використовуючи стандартний, який постачається з os x):

додавши до своїх gem install mysql2прапорів нижче

  • --srcdir="..." - включає
  • --with-mysql-dir="..." - каталог mysql
  • --with-mysql-config="..." - файл mysql_config

подобається це gem install mysql2 --srcdir=/usr/local/mysql/include/ --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config


1

У Centos 6.x (7 повинен працювати) з SCL (колекція програмного забезпечення) rh-mysql:

scl enable rh-mysql56 bash
gem install mysql2 -v '0.4.5' -- --with-mysql-include=/opt/rh/rh-mysql56/root/usr/include --with-mysql-lib=/opt/rh/rh-mysql56/root/usr/lib64

0

Я думаю, що якщо ви введете rvm use ruby-2.1.0@rails4.0 --createу свій каталог, bundle installце працює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.