Ошибка установки mysql2: не удалось собрать собственное расширение gem


485

У меня возникают некоторые проблемы при попытке установить mysql2гем для Rails. Когда я пытаюсь установить его, запустив bundle installили gem install mysql2он выдает следующую ошибку:

Ошибка установки mysql2: ОШИБКА: не удалось создать собственное расширение gem.

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


В моем случае ruby ​​2.1 ошибки не было, но она зависла на несколько минут. Spacemonkey ответ исправил это.
Лусио

Ответы:


916

В Ubuntu / Debian и других дистрибутивах, использующих aptitude:

sudo apt-get install libmysql-ruby libmysqlclient-dev

Пакет libmysql-rubyбыл снят с производства и заменен ruby-mysql. Вот где я нашел решение.

Если приведенная выше команда не работает из-за libmysql-rubyневозможности найти ее, этого должно быть достаточно:

sudo apt-get install libmysqlclient-dev

В Red Hat / CentOS и других дистрибутивах, использующих yum:

sudo yum install mysql-devel

В Mac OS X с Homebrew :

brew install mysql

5
у меня та же проблема на windows 7 .. есть идеи? команда выше не работает для меня ..
Femi

37
Здравствуйте, я использую Ubuntu 12.04 с Ruby 1.9.3 и Rails 3.2.8, и в моем случае установки libmysqlclient-devбыло достаточно.
С.М.Мусави

2
Если вы используете Mac OSX: обновитесь до последней версии XCode и установите Инструменты разработки. У меня была та же проблема установки mysql (даже при использовании --with-mysql-config = / usr / local / mysql / bin / mysql_config)
Americo Savinon

2
Не нуждался в libmysql-ruby, так как я установил Ruby через RVM
Майкл Ланг,

1
Для окон попробуйте ответ с
галочкой

60

Я на Mac и использую homebrew для установки программ с открытым исходным кодом. Мне пришлось установить инструменты Mac Dev, чтобы установить homebrew, но после этого все было просто:

brew install mysql

установить MySQL. С тех пор у меня не было проблемы с самоцветами mysql.


3
Я получаю ошибку даже после этого. Должен ли я передать некоторые варианты, когда я делаю gem я mysql2 ??
hnprashanth

После этого у меня не было проблем с установкой mysql2 ruby ​​gem на Mac OSX Lion.
KrisG

3
Если это не поможет, попробуйте brew link mysql --force.
Чак Бэтсон

34

Вот решение для пользователей Windows , надеюсь, это поможет!

Использование MySQL с Rails 3 в Windows

  • Установите railsinstaller -> www.railsinstaller.org (я установил его в c: \ Rails)

  • Установите MySQL (я использовал MySQL 5.5) -> dev.mysql.com/downloads/installer/

--- для установки mySQL ---

Если у вас еще не установлены эти два файла , они могут понадобиться для

запуска MySQL vcredist_x86.exe -> http://www.microsoft.com/download/en/details.aspx? id = 5555 dotNetFx40_Full_x86_x64.exe -> http://www.microsoft.com/download/en/details.aspx?id=17718

Использовать стандартную установку Developer Machine

-MySQL Server Config-
порт: 3306
имя службы Windows: MySQL55
mysql root pass: root (вы можете изменить это позже)
(имя пользователя: root)
-MySQL Server Config-

--- для установки MySQL ---


--- Установите mysql2 Gem ---

Важно: Сделайте это с помощью командной строки Git Bash (это было установлено с помощью railsinstaller) -> start / Git Bash

gem install mysql2 - '--with-mysql-lib = "c: \ Program Files \ MySQL \ MySQL Server 5.5 \ lib "--with-mysql-include =" c: \ Program Files \ MySQL \ MySQL Server 5.5 \ include "'

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

Наконец, скопируйте файл libmysql.dll из
C: \ Program Files \ MySQL \ MySQL Server 5.5 \ lib
to
C: \ Rails \ Ruby1.9.2 \ bin

--- Установите mysql2 Gem ---


Теперь вы сможете использовать приложение Rails с MySQL, если вы не уверены, как создать приложение Rails 3 с MySQL, читайте дальше ...


---

Запустите приложение Rails 3 с MySQL --- Откройте командную строку (не Git Bash) -> start / cmd
Перейдите в папку (c: \ Sites)
Создайте новое приложение rails

rails new world

Удалите файл c: \ Sites \ world \ public \ index.html
Отредактируйте файл c: \ Sites \ world \ config \ rout.rb,
добавьте эту строку -> root: to => 'towns # index'

Открыть командную строку (генерировать представления и контроллеры)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer



Отредактируйте файл c: \ Sites \ world \ app \ models \ city.rb, чтобы он выглядел следующим образом

class City < ActiveRecord::Base
 set_table_name "city"
end

Отредактируйте файл c: \ Sites \ world \ config \ database.yml, чтобы он выглядел следующим образом

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

добавить в gemfile

gem 'mysql2'

Откройте командную строку Windows cmd, а не Git Bash (запустите ваше приложение!)
Перейдите в папку вашего приложения (c: \ Sites \ world)

rails s

Откройте ваш браузер здесь -> http: // localhost: 3000

--- Получите приложение Rails 3, работающее с MySQL ---


Спасибо, проблема была в том, что я использовал PowerShell для widnows, а не обычную командную строку. теперь это работает :)
Danpe

имя хоста должно быть 127.0.0.1, а если пароль - число, его нужно заключить в кавычки ex '123456', иначе мы можем набрать обычно ex admin123
duykhoa

3
Использование XAMPP:gem install mysql2 -- --with-mysql-dir=C:\xampp\mysql
Mifeng

Посмотрите путь --with-mysql-include: gem install mysql2 - --platform = ruby ​​--with-mysql-lib = "d: \ mariadb \ lib" --with-mysql-include = "d: \ mariadb \ include \ mysql "
Иван

@Mifeng отлично работает для меня, но я использую GitBash и нуждаюсь -- --with-mysql-dir="C:\xampp\mysql"в кавычках, которые мои `` были удалены. Спасибо
Mutmatt

20

У меня есть несколько компьютеров, 32- и 64-битный процессор, они работают на Ubuntu Linux, Maverick (10.10).

У меня была та же проблема, и для меня, sudo apt-get install libmysql-ruby libmysqlclient-dev сделал работу !!!


19

Для MacOS Mojave :

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include


а также для MacOS Каталина
Влад

17

Еще один способ для пользователей MacOS

Если вы использовали «brew» для установки mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

xxx = версия mysql2 gem, которую вы хотите установить
yyy = версия mysql, которую вы установили, ls /usr/local/Cellar/mysqlчтобы найти ее.


Попробовал ~ 10 ответов на все вопросы, заданные здесь ... Вы решили это. Спасибо :)
Стан

7

Вы пытались использовать

 gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib 

указать расположение каталога thebase, а также путь к библиотекам MySQL, которые необходимы для завершения установки gem?

Источники: MySQL Gem Install ERROR: Не удалось создать собственное расширение gem. MySQL Forums :: Ruby :: Требуется помощь при установке привязки MySQL для Ruby.


Работал отлично. Мне пришлось использовать другой путь, который я нашел, позвонив which mysqlи затем найдя libкаталог оттуда.
Джошуа Пинтер


5

Это решило мою проблему однажды в Windows:

subst X: "C:\Program files\MySQL\MySQL Server 5.5" 
gem install mysql2 -v 0.x.x --platform=ruby -- --with-mysql-dir=X: --with-mysql-lib=X:\lib\opt 
subst X: /D

Я собирался опубликовать источник, но я вижу, что пользователь Ritesh Kumar уже сделал это. Так что его заслуга, а не моя.
Карлос Пардилья

Если у вашей библиотеки нет папки opt:gem install mysql2 --platform=ruby -- --with-mysql-dir=X: --without-opt-dir
Junior Mayhé

5

Если у вас все еще проблемы ...

Попробуйте установить

   sudo apt-get install ruby1.9.1-dev

4

У меня была эта проблема на Windows 7. Это, очевидно, проблема несовместимости, и решение заключается в следующем:

Загрузите libmySQL.dllфайл из более раннего инсталлятора InstantRails. Он доступен в репозитории InstantRails GitHub .

Затем скопируйте этот файл в папку Ruby / bin.

Теперь вы готовы идти;)


1
Хмм. :( Я попробовал это, но все еще получаю ошибку при попытке запустить bundle install.
aakoch

3

Я тоже получил эту ошибку. Решается установкой пакетов разработки. Я использую арку, и это было:

sudo pacman -S base-devel

который установил:

m4, autoconf, automake, bison, fakeroot, flex, libmpc, ppl, cloog-ppl, elfutils, gcc,
libtool, make, patch, pkg-config

но я думаю, что на самом деле нужно было сделать и GCC. Ошибка вывода говорит (на моей машине, среди прочего):

«Сначала нужно установить инструменты разработки».

Так что это было очевидное решение, и оно помогло.


3

Вы должны установить некоторые зависимости

sudo apt-get install libmysql-ruby libmysqlclient-dev

3

В Debian Stretch пакет, который работал для меня, был default-libmysqlclient-dev

sudo apt-get update && apt-get install -y default-libmysqlclient-dev


3

В моем случае это помогло:

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

Затем:

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

Результат:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

Смотрите этот пост (ВНИМАНИЕ: японский язык внутри).


3

На Ubuntu (18.04)

я смог решить эту проблему, выполнив следующее:

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

ссылка


2

Я столкнулся с этой ошибкой на моем Mac и обнаружил, что мне нужно перейти с mysql 32bit на mysql 64 bit, чтобы эта ошибка исчезла. Я работал под управлением OSX 10.6 на Intel MacBook Pro с ruby ​​1.9.2 и rails3.0.0

Мне также нужно было установить xcode, чтобы получить такие утилиты Unix, как «make», необходимые для компиляции гема.

Как только это было сделано, я смог запустить gem install mysql и gem install mysql2 без ошибок.


1

Для пользователя Windows: вы устанавливаете lib и включаете путь вашего mysql, например, если вы используете xampp, вы можете получить так:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'

1

Решение работает только на Mac OS X

Если вы установили MySQL с помощью homebrew, для меня сработало удаление MySQL и установка MySQL Community Edition через веб-сайт MySQL ( https://www.mysql.com/). ).

После установки просто повторно введите команду gem install mysql2или, если необходимо sudo gem install mysql2, если у вас возникают проблемы с отказом в разрешении.


0

Я получил гем, собранный на Mac OS X 10.6.6 от 1) Обеспечение установки пакета инструментов разработчика 2) Загрузка текущего пакета MySQL (5.5.8 в моем случае) из Source 3) Установка инструмента cmake с cmake.org 4 ) Следуя инструкциям в разделе 2.11 INSTALL-SOURCE из дистрибутивных файлов mysql 5) sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include Gem собран успешно, но в документации есть две ошибки, на которые жалуются rdoc и ri. Но теперь, когда я пытаюсь потребовать «mysql2», я получаю

LoadError: no such file to load -- mysql2/mysql2

Я надеялся, что ошибка, которую я получу, заключается в том, что libmysqlclient.16.dylib не может быть найден, потому что мы выяснили это в другом посте (ищите install_name_tool).

В моем $ PATH есть / usr / local / mysql (там находятся мои исходные и встроенные файлы), поэтому я немного озадачен. Если у кого-то возникнут мысли, я вернусь после нескольких часов сна.



0

После того, как вы исправите проблемы с mysql-dev, вам может потребоваться удалить неверную установку mysql2. Посмотрите внимательно на сообщения после установки $ bundle. Вам может понадобиться

rm -rf vendor/cache/
rm -rf ./Zentest

Это устранит плохую установку mysql2, так что окончательная установка $ bundle может создать хорошую установку.



0

Получил «Сначала нужно установить инструменты разработки». ошибка при попытке установить гем mysql2 после обновления до Mac OS X Mountain Lion . По всей видимости, это обновление удаляет компиляторы командной строки.

Исправить:

  • Я удалил свою очень старую версию Xcode (запустил скрипт удаления в / Developer / Library). Затем удалил каталог / Developer.
  • Зашел в AppStore и скачал Xcode.
  • Запустил Xcode, зашел в «Настройки» -> «Загрузки» и установил инструменты командной строки.

0

Вы получаете эту проблему, потому что вы не установили MySql. Перед установкой mysql2 gem. Установите MySQL. После этого mysql2 gem будет установлен.


0

Я просто хотел добавить этот ответ специально для пользователей Mac .

Мой сервер работал отлично, пока я не обновил свой xcode. Во время запуска моего сервера rails ошибка выглядела так

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb --with-mysql-
    checking for rb_thread_blocking_region()... /Users/user/.rvm/rubies/ruby-1.9.3-  
    p448/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an    
    executable file. (RuntimeError)

И было предложение установить mysql2 gem в конце сообщения об ошибке. Поэтому, когда я попытался установить его, я получил ошибку, как указано выше в этом вопросе. Я получил следующую ошибку

ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.

Так, как было предложено в этом посте, я попытался «brew install mysql», и это означало, что версия mysql уже установлена. Но было предупреждение перед тем, как сказать

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license

Тогда я попробовал это sudo xcodebuild -license и напечатал «согласен» в конце. Вы должны быть root, чтобы согласиться с лицензией.

После этого я снова попытался установить пакет, а затем все работает нормально, как обычно. [Даже из-за этого обновления xcode у меня тоже были проблемы с моей башней.]


0

libmysql-ruby был снят с производства и заменен. Новая команда:

 sudo apt-get install ruby-mysql libmysqlclient-dev
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.