Помилка встановлення 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.