Nie można zainstalować mysql2 gem

Nie jestem w stanie zainstalować Gem mysql2 w moim systemie Windows7 x64. Próbowałem używać zarówno 32-bitowych, jak i 64-bitowych wersji serwera MySQL, ale żadna nie dała mi więcej.

Zainstalowałem Ruby 1.8, development kit i platformę Rails. Zainstalowałem nawet minGW, aby umożliwić kompilację rzeczy w C++/C. Serwer MySQL został zainstalowany w domyślnej lokalizacji.

Podczas wykonywania polecenia:

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\"

Otrzymuję następujące wyjście z konsoli:

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

Wyjście z moje środowisko według Rubygems to:

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/

W systemie zainstalowano również następujące klejnoty:

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)

Nie wiem, czego brakuje lub jest źle, ale pliki wyjściowe wskazywane przez skrypt zawierają następujące dane:

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

Mam nadzieję, że ktoś wskaże, co robię źle, lub czego tak naprawdę brakuje w moim systemie programistycznym, aby ten klejnot został prawidłowo zainstalowany i działa.

Author: the Tin Man, 2011-04-30

9 answers

W końcu to rozwiązałem:

  1. pobrano i zainstalowano MySQL 64bit w wersji 5.5
  2. Pobrano archiwum zip Dla 32-bitowej wersji 5.5.
  3. wyodrębniono 32-bitowe foldery include i lib do C:\MySQL.
  4. Zainstalowany Ruby 1.9.2.
  5. zainstalowałem Devkit Ruby.
  6. Installed The gems:
    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
Teraz działa jak urok. Wygląda na to, że klejnot MySQL ma problemy ze znalezieniem danych podczas radzenia sobie z 64-bitowym.
 39
Author: coding-bunny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-06 03:19:21

Oto, co zadziałało dla mnie przy użyciu: Win7 64 / MySQL 5.5 64-bit / Ruby 1.9.2:

  1. Download libmysql.dll .
  2. skopiuj powyższy libmysql.dll do C:\Ruby192\bin oraz C:\Ruby192\lib, albo gdziekolwiek jesteś.
  3. 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"'
Powodzenia.
 19
Author: JohnF,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-06 03:12:33

If still getting error then cross check the steps of installation on -

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

Gdzie większość użytkowników była w stanie zainstalować mysql2 gem po wykonaniu opisanych kroków.

 6
Author: Ritesh Kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-30 18:42:29

Zaakceptowana odpowiedź nie zadziałała na mnie, podobnie jak pozostałe 2. Jednak komentarz MG na link od Ritesh zrobił dla mnie trick. Musiałem podać wersję 0.2.6 i podać parametr -- platform = ruby. (Uwaga: musiałem również pobrać wersję "noinstall" MySQL, aby uzyskać /lib / opt)

Oto Jak mam gem zainstalowany na Windows

gem install mysql2 -v 0.2.6 -- --platform=ruby --with-mysql-lib=C:\Ruby192\MySQL\lib\opt --with-mysql-dir=C:\Ruby192\MySQL
 2
Author: MM.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-14 04:10:15

Wiem, że wątek jest związany z Windows, ale dotarłem do niego szukając tego samego problemu na Linuksie i naprawiłem go instalując lib "libmysqlclient-dev"

 1
Author: PedroSena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-06 12:08:01

Miałem podobne problemy z MySQL 5.6 Pod 64-bitowym Windows 7. Główne rozwiązanie podane tutaj zadziałało. (rozwiązanie zaproponowane przez kobalz polegające na skopiowaniu dll nie zadziałało. Nie mam pojęcia, dlaczego to działa dla kobalz, ale nie dla mnie!)

Natknąłem się wtedy na inny problem, który jest opisany w tym poście:

Mysql2 gem skompilowany dla błędnej biblioteki klienta mysql

Opisane tam rozwiązanie pozwala uniknąć pobierania kompletnego 32-bitowego MySQL i naprawiono oba problemy. Zasadniczo, Pobierz mysql connector (znacznie mniejszy download) i użyj go do skompilowania mysql2 gem. Musisz pobrać dokładnie odpowiednią wersję, zgodnie z opisem w poście. W moim przypadku:

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

Następnie skopiuj lib \ libmysql.stamtąd plik dll do katalogu Ruby bin, jak opisano powyżej.

Wkładam złącze do c:\mysql-connector-c-noinstall-6.0.2-win32

Więc polecenie zbudowania i zainstalowania gem było:

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"

Potem natknąłem się na kolejne problemy, gdy uruchomiłem rake, aby zrobić migrację, ale to dlatego, że używałem kleju mysql (nie mysql2) i miałem zapomniałem zaktualizować bazę danych.yml. Z klejnotem mysql2 trzeba powiedzieć:

Rozwój: adapter: mysql2

Zamiast

Rozwój: adapter: mysql

Co jest oczywiste, gdy już to rozgryzłeś, ale komunikaty o błędach, które otrzymałem, były podobne do tych, które otrzymałem wcześniej, więc wyglądało to tak, jakby nadal coś było nie tak z moim klejnotem.

 1
Author: user1208639,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:01:49

Ten u mnie zadziałał na instalację 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" '

Budowanie natywnych rozszerzeń za pomocą: '-- with-mysql-lib="c:\Program pliki (x86) \ Maria DB 5.5\lib " -- with-mysql-include="c:\Program Files (x86) \ MariaDB 5.5 \ include \ mys ql ""

Upewnij się, że używasz pakietów x64 MariaDB, jeśli planujesz używać Ruby x64. I oczywiście, nie zapomnij skopiować C:\Program Files (x86) \ MariaDB 5.5 \ lib\libmysql.dll do c:\Ruby200\bin w moim przypadku.

 1
Author: deajan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-23 16:23:06

Skopiuj libmysql.dll znajduje się w katalogu bin Twojej instalacji MySQL do katalogu bin Twojej instalacji Ruby. Moje znajdowały się w C:\Program Files\MySQL and C:\Ruby.

 0
Author: kobaltz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-30 11:39:45

To działa dla mnie na windows 8 64bit i przy użyciu ruby 64bit

Pobierz i zainstaluj serwer MYSQL 5.6 64bit

Następnie uruchom polecenie:

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 "'

Hope this helps

 0
Author: Omar M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-12 01:38:40