Подтвердить что ты не робот

Не удается установить mysql2 gem

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

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

При выполнении команды:

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)

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

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

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

4b9b3361

Ответ 1

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

  • Загружен и установлен MySQL 64-разрядная версия 5.5
  • Загрузили zip-архив для 32-разрядной версии 5.5.
  • Извлеките 32-битные папки include и lib в C:\MySQL.
  • Установленный Ruby 1.9.2.
  • Установлен Ruby Devkit.
  • Установлены драгоценные камни:
    • gem install mysql
    • gem install mysql2 -- --with-mysql-lib=C:\MySQL\lib --with-mysql-include=C:\MySQL\include
    • gem install rails
    • gem install fastthread
    • gem install haml

Теперь он работает как шарм. Кажется, что у gem-сервера MySQL есть проблемы с поиском данных при работе с 64-разрядными.

Ответ 2

Вот что сработало для меня, используя: Win7 64/MySQL 5.5 64-bit/Ruby 1.9.2:

  • Загрузите libmysql.dll.
  • Скопируйте приведенный выше файл libmysql.dll в C:\Ruby192\bin И C:\Ruby192\lib или где бы вы ни находились в вашей библиотеке и bin.
  • Run:
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"'

Удачи.

Ответ 3

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

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

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

Ответ 4

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

Вот как я получил установленный gem на Windows

gem install mysql2 -v 0.2.6 -- --platform=ruby --with-mysql-lib=C:\Ruby192\MySQL\lib\opt --with-mysql-dir=C:\Ruby192\MySQL

Ответ 5

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

Ответ 6

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

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

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 оттуда в ваш каталог bin Ruby, как описано выше.

Я установил свой коннектор в 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- connect-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. С драгоценным камнем mysql2 он должен сказать:

развитие:   адаптер: mysql2

а не

развитие:   адаптер: mysql

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

Ответ 7

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

Ответ 8

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

Ответ 9

это то, что сработало для меня на 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" '

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