Невозможно установить gem mysql2

Я не могу установить 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 ответов

Решение

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

  1. Скачал и установил MySQL 64bit version 5.5
  2. Скачал zip-архив для 32-битной версии 5.5.
  3. Извлечены 32-битные папки include и lib для C:\MySQL,
  4. Установлен Ruby 1.9.2.
  5. Установлен Рубин Девкит.
  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-битной версией.

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

  1. Скачать libmysql.dll.
  2. Скопируйте вышеуказанный libmysql.dll в C:\Ruby192\bin А ТАКЖЕ C:\Ruby192\libили где бы вы ни находились.
  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""

Удачи.

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

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

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

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

Принятый ответ не сработал для меня, как и другой вариант 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

Этот работал для меня для установки 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\ включают \ MySQL ""

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

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

У меня были подобные проблемы с 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 для выполнения миграции, но это было потому, что я использовал гем mysql (не mysql2) и забыл обновить свой файл database.yml. С самоцветом mysql2 нужно сказать:

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

скорее, чем

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

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

Это то, что у меня работает на 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"'

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

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

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