为什么我不能安装mysql2 gem?

时间:2018-07-04 04:09:25

标签: mysql ruby-on-rails mariadb bundler rhel7

我的操作系统是Red Hat Enterprise Linux Server 7.4(Maipo),CPU体系结构是x86_64,字节顺序是Little Endian

我正在为Rails应用做TransactionTestCase,但是我得到了

bundle install

An error occurred while installing mysql2 (0.4.10), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'` succeeds before bundling. 会给我:

gem install mysql2 -v '0.4.10' --source 'https://rubygems.org/'

我读了this post

但执行Building native extensions. This could take a while... ERROR: Error installing mysql2: ERROR: Failed to build gem native extension. current directory: /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10/ext/mysql2 /home/my-user-name/.rvm/rubies/ruby-2.4.4/bin/ruby -r ./siteconf20180704-8600-mkihlj.rb extconf.rb checking for rb_absint_size()... yes checking for rb_absint_singlebit_p()... yes checking for ruby/thread.h... yes checking for rb_thread_call_without_gvl() in ruby/thread.h... yes checking for rb_thread_blocking_region()... no checking for rb_wait_for_single_fd()... yes checking for rb_hash_dup()... yes checking for rb_intern3()... yes checking for rb_big_cmp()... yes ----- Using mysql_config at /usr/bin/mysql_config ----- checking for mysql.h... yes checking for errmsg.h... yes checking for SSL_MODE_DISABLED in mysql.h... no checking for MYSQL_OPT_SSL_ENFORCE in mysql.h... yes checking for MYSQL.net.vio in mysql.h... no checking for MYSQL.net.pvio in mysql.h... yes checking for MYSQL_ENABLE_CLEARTEXT_PLUGIN in mysql.h... yes ----- Setting libpath to /usr/lib64/ ----- creating Makefile current directory: /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10/ext/mysql2 make "DESTDIR=" clean current directory: /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10/ext/mysql2 make "DESTDIR=" compiling client.c In file included from ./mysql2_ext.h:35:0, from client.c:1: client.c: In function ‘rb_set_ssl_mode_option’: ./client.h:56:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] mysql_client_wrapper *wrapper; \ ^ client.c:118:3: note: in expansion of macro ‘GET_CLIENT’ GET_CLIENT(self); ^ client.c:119:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] int val = NUM2INT( setting ); ^ client.c:145:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ client.c: At top level: cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default] cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default] cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default] cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default] compiling infile.c compiling mysql2_ext.c compiling result.c result.c: In function ‘rb_mysql_result_alloc_result_buffers’: result.c:326:40: warning: assignment from incompatible pointer type [enabled by default] wrapper->result_buffers[i].is_null = &wrapper->is_null[i]; ^ result.c:328:40: warning: assignment from incompatible pointer type [enabled by default] wrapper->result_buffers[i].error = &wrapper->error[i]; ^ result.c: At top level: cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default] cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default] cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default] cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default] compiling statement.c statement.c: In function ‘rb_raise_mysql2_stmt_error’: statement.c:50:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] VALUE rb_error_msg = rb_str_new2(mysql_stmt_error(stmt_wrapper->stmt)); ^ statement.c:57:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] rb_encoding *default_internal_enc = rb_default_internal_encoding(); ^ In file included from ./mysql2_ext.h:35:0, from statement.c:1: statement.c: In function ‘execute’: ./client.h:56:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] mysql_client_wrapper *wrapper; \ ^ statement.c:273:3: note: in expansion of macro ‘GET_CLIENT’ GET_CLIENT(stmt_wrapper->client); ^ statement.c:405:13: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] VALUE rb_val_as_string = rb_funcall(argv[i], intern_to_s, 0); ^ In file included from ./mysql2_ext.h:35:0, from statement.c:1: statement.c: In function ‘fields’: ./client.h:56:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement] mysql_client_wrapper *wrapper; \ ^ statement.c:481:3: note: in expansion of macro ‘GET_CLIENT’ GET_CLIENT(stmt_wrapper->client); ^ statement.c: At top level: cc1: warning: unrecognized command line option "-Wno-self-assign" [enabled by default] cc1: warning: unrecognized command line option "-Wno-constant-logical-operand" [enabled by default] cc1: warning: unrecognized command line option "-Wno-parentheses-equality" [enabled by default] cc1: warning: unrecognized command line option "-Wno-tautological-compare" [enabled by default] linking shared-object mysql2/mysql2.so /usr/bin/ld: cannot find -lmariadb collect2: error: ld returned 1 exit status make: *** [mysql2.so] Error 1 make failed, exit code 2 Gem files will remain installed in /home/my-user-name/.rvm/gems/ruby-2.4.4/gems/mysql2-0.4.10 for inspection. Results logged to /home/my-user-name/.rvm/gems/ruby-2.4.4/extensions/x86_64-linux/2.4.0/mysql2-0.4.10/gem_make.out 可以得到:

sudo yum install mysql-devel

即使运行Loaded plugins: search-disabled-repos Package MariaDB-devel-10.3.8-1.el7.centos.x86_64 already installed and latest version Nothing to do 也会:

sudo yum list installed mysql-devel

这很奇怪。

之前,我通过执行以下两个步骤安装了MariaDB:

步骤1:

Loaded plugins: search-disabled-repos
Error: No matching Packages to list

它的内容是:

sudo vi /etc/yum.repos.d/MariaDB.repo

第2步:

# MariaDB 5.5 RedHat repository list - created 2018-07-04 03:54 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/rhel7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

我确实开始了:sudo yum install MariaDB-server MariaDB-client

如何成功安装mysql2 gem?

感谢进阶!

2 个答案:

答案 0 :(得分:1)

首次运行

sudo apt-get install libmysqlclient-dev

yum install mysql-devel

然后

bundle install

答案 1 :(得分:0)

我遇到了同样的问题,this answer on a mysql2 issue为我工作。安装mysql-devel对我没有帮助。

他们的答案以及对我有用的东西……yum install MariaDB-shared

附录:我正在与MariaDB 10.3.9一起安装mysql2 v0.5.2。