Невозможно установить gem mysql2 - PullRequest
18 голосов
/ 30 апреля 2011

Я не могу установить gem mysql2 в моей системе Windows7 x64. Я пытался использовать как 32-разрядную, так и 64-разрядную версии сервера MySQL, но ни одна из них не дала мне дальнейших результатов.

Я установил Ruby 1.8, комплект разработчика и платформу Rails. Я даже установил minGW, чтобы разрешить компиляцию C ++ / C. MySQL Server был установлен в расположении по умолчанию.

При запуске команды:

C:\Users\Arne>gem install mysql2 -- --with-mysql-include="C:\Program Files (x86)\MySQL\MySQL Server 5.1\include" --with-mysql-lib="C:\Program Files (x86)\MySQL\MySQL Server 5.1\lib\"

Я получаю следующий вывод из консоли:

Temporarily enhancing PATH to include DevKit...
Building native extensions.  This could take a while...
*** 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=C:/Ruby/bin/ruby
        --with-mysql-dir
        --without-mysql-dir
        --with-mysql-include=${mysql-dir}/include
        --with-mysql-lib=${mysql-dir}/lib
        --with-libmysqllib
        --without-libmysqllib
ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.

        C:/Ruby/bin/ruby.exe extconf.rb --with-mysql-include=C:\Program Files (x
86)\MySQL\MySQL Server 5.1\include --with-mysql-lib=C:\Program Files (x86)\MySQL
\MySQL Server 5.1\lib"
checking for rb_thread_blocking_region()... no
checking for main() in -llibmysql... no


Gem files will remain installed in C:/Ruby/lib/ruby/gems/1.8/gems/mysql2-0.3.2 f
or inspection.
Results logged to C:/Ruby/lib/ruby/gems/1.8/gems/mysql2-0.3.2/ext/mysql2/gem_mak
e.out

Вывод моей среды в соответствии с Rubygems:

C:\Users\Arne>gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.7.2
  - RUBY VERSION: 1.8.7 (2011-02-18 patchlevel 334) [i386-mingw32]
  - INSTALLATION DIRECTORY: C:/Ruby/lib/ruby/gems/1.8
  - RUBY EXECUTABLE: C:/Ruby/bin/ruby.exe
  - EXECUTABLE DIRECTORY: C:/Ruby/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-mingw32
  - GEM PATHS:
     - C:/Ruby/lib/ruby/gems/1.8
     - C:/Users/Arne/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

В системе также установлены следующие гемы:

C:\Users\Arne>gem list --local

*** LOCAL GEMS ***

abstract (1.0.0)
actionmailer (3.0.7)
actionpack (3.0.7)
activemodel (3.0.7)
activerecord (3.0.7)
activeresource (3.0.7)
activesupport (3.0.7)
arel (2.0.9)
builder (3.0.0, 2.1.2)
bundler (1.0.12)
erubis (2.7.0, 2.6.6)
fastthread (1.0.7)
i18n (0.5.0)
mail (2.3.0, 2.2.18)
mime-types (1.16)
mysql (2.8.1 x86-mingw32)
polyglot (0.3.1)
rack (1.2.2)
rack-mount (0.7.2, 0.6.14)
rack-test (0.5.7)
rails (3.0.7)
railties (3.0.7)
rake (0.8.7)
rdoc (3.5.3, 2.5.11)
rdoc-data (2.5.3)
rubygems-update (1.7.2)
thor (0.14.6)
treetop (1.4.9)
tzinfo (0.3.27, 0.3.26)

Я не знаю, чего не хватает или что нет, но выходные файлы, на которые указывает скрипт, содержат следующие данные:

mkmf.log:

have_func: checking for rb_thread_blocking_region()... -------------------- no

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I.    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -L.      -lmsvcrt-ruby18-static  -lshell32 -lws2_32  "
conftest.c: In function 't':
conftest.c:7:53: error: 'rb_thread_blocking_region' undeclared (first use in this function)
conftest.c:7:53: note: each undeclared identifier is reported only once for each function it appears in
checked program was:
/* begin */
1: #include <ws2tcpip.h>
2: #include <winsock2.h>
3: #include <windows.h>
4: 
5: /*top*/
6: int main() { return 0; }
7: int t() { void ((*volatile p)()); p = (void ((*)()))rb_thread_blocking_region; return 0; }
/* end */

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I.    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -L.      -lmsvcrt-ruby18-static  -lshell32 -lws2_32  "
C:\Users\Arne\AppData\Local\Temp\ccCicaNu.o: In function `t':
C:\Ruby\lib\ruby\gems\1.8\gems\mysql2-0.3.2\ext\mysql2/conftest.c:3: undefined reference to `rb_thread_blocking_region'
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { rb_thread_blocking_region(); return 0; }
/* end */

--------------------

have_library: checking for main() in -llibmysql... -------------------- no

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -IC:\Program    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -LC:\Program -L.      -lmsvcrt-ruby18-static -llibmysql  -lshell32 -lws2_32  "
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibmysql
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: #include <ws2tcpip.h>
2: #include <winsock2.h>
3: #include <windows.h>
4: 
5: /*top*/
6: int main() { return 0; }
7: int t() { void ((*volatile p)()); p = (void ((*)()))main; return 0; }
/* end */

"gcc -o conftest -I. -IC:/Ruby/lib/ruby/1.8/i386-mingw32 -I. -IC:\Program    -g -O2 -DFD_SETSIZE=256    conftest.c  -L. -LC:/Ruby/lib -LC:\Program -L.      -lmsvcrt-ruby18-static -llibmysql  -lshell32 -lws2_32  "
c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llibmysql
collect2: ld returned 1 exit status
checked program was:
/* begin */
1: /*top*/
2: int main() { return 0; }
3: int t() { main(); return 0; }
/* end */

--------------------

gem_make.out:

C:/Ruby/bin/ruby.exe extconf.rb --with-mysql-include=C:\Program Files (x86)\MySQL\MySQL Server 5.1\include --with-mysql-lib=C:\Program Files (x86)\MySQL\MySQL Server 5.1\lib"
checking for rb_thread_blocking_region()... no
checking for main() in -llibmysql... no

Я надеюсь, что кто-то может указать, что я делаю неправильно или что на самом деле не хватает в моей системе разработки, чтобы правильно установить и работать с этим камнем.

Ответы [ 9 ]

40 голосов
/ 02 мая 2011

Я наконец решил:

  1. Скачал и установил MySQL 64-битная версия 5.5
  2. Скачал zip-архив для 32-битной версии 5.5.
  3. Извлек 32-бит включает и lib папки в C:\MySQL.
  4. Установлен Ruby 1.9.2.
  5. Установлен Ruby Devkit.
  6. Установлены гемы:
    1. gem install mysql
    2. gem install mysql2 -- --with-mysql-lib=C:\MySQL\lib --with-mysql-include=C:\MySQL\include
    3. gem install rails
    4. gem install fastthread
    5. gem install haml

Теперь это работает как шарм.Похоже, в геме MySQL есть проблемы с поиском данных при работе с 64-битными.

19 голосов
/ 23 сентября 2011

Вот что мне помогло: Win7 64 / MySQL 5.5 64-bit / Ruby 1.9.2:

  1. Скачать libmysql.dll .
  2. Скопируйте вышеупомянутый libmysql.dll в C:\Ruby192\bin И C:\Ruby192\lib или в любое место, где находятся ваши lib и bin.
  3. Пробег:
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" --with-mysql-dir="c:\Program Files\MySQL\MySQL Server 5.5"'

Удачи.

6 голосов
/ 30 мая 2011

Если ошибка по-прежнему сохраняется, проверьте перекрестные шаги установки на -

http://rorguide.blogspot.com/2011/03/installing-mysql2-gem-on-ruby-192-and.html

, где большинство пользователей смогли установить gem mysql2 после выполнения описанных шагов.*

2 голосов
/ 14 июня 2011

Принятый ответ не сработал для меня, как и другой 2. Однако комментарий MG по ссылке от Ritesh помог мне. Мне пришлось указать версию 0.2.6 и включить параметр --platform = ruby. (Примечание: мне также пришлось скачать версию MySQL «noinstall», чтобы получить / lib / opt)

Вот как я установил гем в Windows

gem install mysql2 -v 0.2.6 -- --platform=ruby --with-mysql-lib=C:\Ruby192\MySQL\lib\opt --with-mysql-dir=C:\Ruby192\MySQL
1 голос
/ 23 декабря 2013

Этот работал для меня для установки MariaDB 5.5:

gem install mysql2 - '--with-mysql-lib = "c: \ Program Files (x86) \ MariaDB 5.5 \ lib" --with-mysql-include = "c: \ Program Files (x86) \ MariaDB 5.5 \ include \ mysql "'

Создание собственных расширений с помощью: '--with-mysql-lib = "c: \ Program Files (x86) \ Maria БД 5.5 \ lib "--with-mysql-include =" c: \ Program Files (x86) \ MariaDB 5.5 \ include \ mys QL " '

Обязательно используйте пакеты x64 MariaDB, если вы планируете использовать Ruby x64. И, конечно же, не забудьте скопировать C: \ Program Files (x86) \ MariaDB 5.5 \ lib \ libmysql.dll в папку c: \ Ruby200 \ bin в моем случае.

1 голос
/ 07 августа 2013

У меня были похожие проблемы с MySQL 5.6 под 64-битной Windows 7. Основное решение, приведенное здесь, работало.(Решение, предложенное Кобальцем только для копирования dll, не сработало. Не знаю, почему оно работает для Кобальца, но не для меня!)

Затем я столкнулся с другой проблемой, которая описана в этом посте:

mysql2 gem скомпилирован для неправильной клиентской библиотеки mysql

Описанное там решение позволяет избежать загрузки полного 32-разрядного MySQL и устранить обе проблемы.По сути, загрузите соединитель mysql (гораздо меньший объем загрузки) и используйте его для компиляции драгоценного камня mysql2.Вы должны загрузить абсолютно правильную версию, как описано в посте.В моем случае:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

затем скопируйте оттуда файл lib \ libmysql.dll в каталог Ruby bin, как описано выше.

Я вставил свой соединитель вc: \ mysql-connector-c-noinstall-6.0.2-win32

, поэтому команда для сборки и установки гема была:

gem install mysql2 - --with-mysql-lib = "c: \ mysql-connector-c-noinstall-6.0.2-win32 \ lib" --with-mysql-include = "c: \ mysql-connector-c-noinstall-6.0.2-win32 \ include"--with-mysql-dir = "c: \ mysql-connector-c-noinstall-6.0.2-win32"

Затем я столкнулся с дополнительными проблемами при запуске rake для выполнения миграции, но это былопотому что я использовал gem mysql (не mysql2), и я забыл обновить свой database.yml.Для gem mysql2 нужно сказать:

разработка: адаптер: mysql2

вместо

разработка: адаптер: mysql

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

1 голос
/ 06 мая 2013

Я знаю, что поток связан с Windows, но я достиг этого в поиске той же проблемы в Linux, и я исправил ее, установив lib "libmysqlclient-dev"

0 голосов
/ 12 августа 2014

это то, что у меня работало на Windows 8 64bit и с использованием Ruby 64bit

скачать и установить MYSQL Server 5.6 64bit

затем выполните команду:

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

надеюсь, это поможет

0 голосов
/ 30 апреля 2011

Скопируйте libmysql.dll, расположенный в каталоге bin вашей установки MySQL, в каталог bin вашей установки Ruby.Мои были расположены в C: \ Program Files \ MySQL и C: \ Ruby.

...