安装mysql的Rails - 安装mysql2时出错:错误:无法构建gem原生扩展

jyt*_*nto 3 ruby mysql sqlite deployment ruby-on-rails

我有一个Rails 3.2.13我想部署的应用程序,但托管服务需要MySQL,而不是我一直在使用的sqlite.

在从转换的过程中sqlite来MySQL,我必须安装红宝石的宝石mysql2,这是给我安装时出现以下错误:

安装mysql2时出错:错误:无法构建gem原生扩展.

我同时尝试了两种bundle install方法gem install mysql2,但是出现了同样的错误信息.

我知道对许多人有用的解决方案是sudo apt-get install libmysql-ruby libmysqlclient-dev,但我在Windows上使用Git Bash ,所以我发现了Windows等价物(@ francois对这个问题的回答).我安装MySQL Server 5.6了安装程序,并运行以下命令:

gem install mysql2 -- '--with-mysql-lib="c:\Program Files\MySQL\MySQL Server 5.6\lib" --with-mysql-include="c:\Program Files\MySQL\MySQL Server 5.6\include"' 
Run Code Online (Sandbox Code Playgroud)

根据我的阅读,这应该成功安装'mysql2'ruby gem.但奇怪的是,我仍然有以下错误:

    Temporarily enhancing PATH to include DevKit... Building native extensions with: '--with-mysql-lib="c:\Program
Run Code Online (Sandbox Code Playgroud)

Files\MySQL\MySQL Server 5.6\lib"--with-mysql -include ="c:\ Program Files\MySQL\MySQL Server 5.6\i nclude"'这可能需要一段时间...错误:安装mysql2时出错:ERROR :无法构建gem原生扩展.

        c:/RailsInstaller/Ruby1.9.3/bin/ruby.exe extconf.rb --with-mysql-lib="c:\Pro gram Files\MySQL\MySQL Server 5.6\lib" --with-mysql-include="c:\Program Files\My SQL\MySQL Server 5.6\include" checking for rb_thread_blocking_region()... yes checking for rb_wait_for_single_fd()... yes checking for rb_hash_dup()... yes
Run Code Online (Sandbox Code Playgroud)

检查rb_intern3()...是检查-llibmysql中的main()...是检查mysql.h ...是检查errmsg.h ...是检查mysqld_error.h ...是创建Makefile

    make generating mysql2-i386-mingw32.def compiling client.c client.c: In function 'rb_raise_mysql2_error': client.c:139:3:
Run Code Online (Sandbox Code Playgroud)

警告:ISO C90禁止混合声明和代码client.c:在函数'finish_and_mark_inactive'中:client.c:508:3:警告:ISO C90禁止混合声明和代码client.c:在函数'rb_mysql_client_abandon_results'中:client.c: 535:3:警告:ISO C90禁止混合声明和代码client.c:在函数'rb_mysql_client_next_result'中:client.c:938:5:警告:ISO C90禁止混合声明和编译mysql2_ext.c编译result.c结果的代码. c:在函数'rb_mysql_result_fetch_fields'中:result.c:407:35:警告:有符号和无符号整数表达式离子之间的比较链接共享对象mysql2/mysql2.so client.o:在函数nogvl_connect': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:158: undefined reference tomysql_real_connect @ 32'client.o:In函数nogvl_init': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:150: undefined reference tomysql_init @ 4'client.o:函数set_ssl_options': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:1078: undefined reference tomysql_ssl_set @ 24'client.o:函数mysql_client_options': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:723: undefined reference tomysql_options @ 12'c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3. 13\ext\mysql2/cl ient.c:727:对mysql_error@4' client.o: In functionrb_mysql_info的未定义引用':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:267:对mysql_info@4' client.o: In functionrb_mysql_client_warning_count'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:257:对mysql_warning_count@4' client.o: In functionnogvl_do_result的未定义引用':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client.c:370:对mysql_store_result@4' client.o: In functionrb_mysql_client_more_results'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:923:对mysql_more_results@4' client.o: In functionnogvl_select_db'的未定义引用: c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:863:对mysql_select_db@8' client.o: In functionnogvl_ping的未定义引用':c:\ RailsInstaller\Ruby1 .9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:894:对mysql_ping@4' client.o: In functionrb_mysql_client_thread_id'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:856:对mysql_thread_id@4' client.o: In functionrb_mysql_client_last_id'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client.c:825:对mysql_insert_id@4' client.o: In functionnogvl_read_query_result'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client.:357:对mysql_read_query_result@4' client.o: In functionrb_mysql_client_server_info的未定义引用':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:788:未定义引用mysql_get_server_version@4' c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:789: undefined reference tomysql_get_server_info @ 4'client.o :在函数rb_mysql_client_info': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:756: undefined reference tomysql_get_client_version @ 0'c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:757:对mysql_get_client_info@0' client.o: In functionrb_mysql_client_real_escape'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:662:undefined reference to mysql_real_escape_string@16' client.o: In functionfinish_and_mark_inactive':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:515:对mysql_free_result@4' client.o: In functionnogvl_send_query'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:334:未定义引用mysql_send_query@12' client.o: In functionnogvl_close':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9. 1个\ \宝石我 sql2-0.3.13\ext\mysql2/cl ient.c:190:未定义引用mysql_close@4' client.o: In functionrb_mysql_client_escape':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:238:未定义引用mysql_escape_string@12' client.o: In functionrb_raise_mysql2_error':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client .c:125:未定义引用mysql_error@4' c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:126: undefined reference tomysql_sqlstate @ 4'c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client.c:140:对mysql_errno@4' client.o: In functionrb_connect'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:297:对mysql_errno@4' client.o: In functionrb_mysql_client_store_result'的未定义引用: c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:966:对mysql_errno@4' client.o: In functionrb_mysql_client_next_result的未定义引用':c:\ RailsInstaller\Ruby1 .9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:939:对mysql_next_result@4' client.o: In functionrb_mysql_client_affected_rows'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby \宝石\ 1.9.1 \宝石\ mysql2-0.3.13 \分机\mysql2/cl ient.c:839:未定义引用mysql_affected_rows@4' client.o: In functionrb_mysql_client_async_result':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client. c:419:对mysql_errno@4' client.o: In functionrb_mysql_client_abandon_results'的未定义引用:c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/client.c:539:undefined reference到mysql_next_result@4' c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:538: undefined reference tomysql_more_results @ 4'c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:547:未定义引用mysql_free_result@4' client.o: In functionnogvl_do_result':c :\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:368:未定义引用mysql_use_result@4' client.o: In functionnogvl_close':c:\ RailsInstaller\Ruby1. 9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:190:未定义引用mysql_close@4' client.o: In functionset_charset_name':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:1067:对mysql_options@12' c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:1069: undefined reference tomysql_error的未定义引用@ 4'client.o:在函数init_mysql2_client': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/cl ient.c:1105: undefined reference tomysql_get_client_info @ 0'come.o:在函数rb_mysql_result_count': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:576: undefined reference tomysql_num_rows中@ 4'结果.o:在func中 灰rb_mysql_result_fetch_field': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:126: undefined reference tomysql_fetch_field_direct @ 8' C:\ RailsInstaller\Ruby1.9.3\lib中\红宝石\宝石\ 1.9.1 \宝石\ mysql2-0.3.13 \分机\ mysql2 /重新sult.c:114:未定义参照mysql_num_fields@4' result.o: In functionrb_mysql_result_fetch_fields':C :\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:403:对mysql_num_fields@4' result.o: In functionnogvl_fetch_row'的未定义引用:c:\ RailsInstaller\Ruby1. 9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:105:对mysql_fetch_row@4' result.o: In functionrb_mysql_result_free_result的未定义引用':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:75:未定义引用mysql_free_result@4' result.o: In functionrb_mysql_result_fetch_row':c:\ RailsInstaller\Ruby1.9.3\lib\ruby​​\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:213:未定义引用mysql_fetch_lengths@4' c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:215: undefined reference tomysql_num_fields @ 4'rend.o:函数rb_mysql_result_each': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:503: undefined reference tomysql_fetch_fields @ 4'rend.o:函数rb_mysql_result_free_result': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:75: undefined reference tomysql_free_result @ 4'rend.o:在函数rb_mysql_result_each': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:531: undefined reference tomysql_fetch_fields @ 4'result.o:函数rb_mysql_result_free_result': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:75: undefined reference tomysql_free_result @ 4'rend.o:函数rb_mysql_result_each': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:490: undefined reference tomysql_num_rows @ 4'rend.o:函数rb_mysql_result_free_result': c:\RailsInstaller\Ruby1.9.3\lib\ruby\gems\1.9.1\gems\mysql2-0.3.13\ext\mysql2/re sult.c:75: undefined reference tomysql_free_result @ 4'colie ect2:ld返回1退出状态make:***[mysql2.so]错误1

    Gem files will remain installed in c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9 .1/gems/mysql2-0.3.13
Run Code Online (Sandbox Code Playgroud)

检查.结果记录到c:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/mysql2-0.3.13/EXT/mysql2/gem_make.out

Can anyone please help?  I am having much trouble comprehending what's wrong with the installation.
Run Code Online (Sandbox Code Playgroud)

mar*_*mol 15

我在Win64环境中遇到了同样的错误.

我测试了很多解决方案,但唯一对我有用的是:

  • gem install mysql2 -v'0.3.11'


Quv*_*Quv 9

我一直对同样的问题感到恼火,终于成功安装了mysql2.荣誉对odiszapc @ github上.看来我通过谷歌发现的任何其他解决方案都不适用于我.

复制并粘贴在这里.所以没有信任我.

gem uninstall mysql2

Download last MySQL connector from http://cdn.mysql.com/Downloads/Connector-C/mysql-    connector-c-noinstall-6.0.2-win32.zip

Extract it to C:\connector-6.0.2

gem install mysql2 --platform=ruby -- '--with-mysql-lib="C:\connector-6.0.2\lib" --with-mysql-include="C:\connector-6.0.2\include" --with-mysql-dir="C:\connector-6.0.2"'
Run Code Online (Sandbox Code Playgroud)

关于我的其他信息.

  • ruby 1.9.3p392(2013-02-22)[i386-mingw32]
  • Rails 3.2.13
  • MySQL Server 5.6
  • mysql2-0.3.13

PS即使你成功安装mysql2,你可能仍然需要一些工作(例如mysql2.so(LoadError)),它libmysql在我的情况下有一些功能,似乎是另一个关于mysql2的重大故障.