安装Mysql 2 gem失败

我正在尝试安装mysql2(版本0.4.5 ),我正在使用Rails 5.0.2 ,Ruby 2.3.1

我已经使用自制软件(版本8.0.11)安装了mysql服务器并启动了mysql:

brew install mysql brew services start mysql 

Gemfile.rb

 gem 'mysql2' 

当我尝试安装gem mysql2时,我收到以下错误

 Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/gomathi/.rvm/gems/ruby-2.3.1@connector/gems/mysql2-0.4.5/ext/mysql2 creating Makefile current directory: /Users/gomathi/.rvm/gems/ruby-2.3.1@connector/gems/mysql2-0.4.5/ext/mysql2 make "DESTDIR=" clean current directory: /Users/gomathi/.rvm/gems/ruby-2.3.1@connector/gems/mysql2-0.4.5/ext/mysql2 make "DESTDIR=" compiling client.c In file included from client.c:1: In file included from ./mysql2_ext.h:41: ./result.h:24:3: error: unknown type name 'my_bool' my_bool *is_null; ^ ./result.h:25:3: error: unknown type name 'my_bool' my_bool *error; ^ client.c:507:3: error: use of undeclared identifier 'my_bool' my_bool res = mysql_read_query_result(client); ^ client.c:509:19: error: use of undeclared identifier 'res' return (void *)(res == 0 ? Qtrue : Qfalse); ^ client.c:828:3: error: use of undeclared identifier 'my_bool' my_bool boolval; ^ client.c:859:7: error: use of undeclared identifier 'boolval' boolval = (value == Qfalse ? 0 : 1); ^ client.c:860:17: error: use of undeclared identifier 'boolval' retval = &boolval; ^ client.c:863:10: error: use of undeclared identifier 'MYSQL_SECURE_AUTH'; did you mean 'MYSQL_DEFAULT_AUTH'? case MYSQL_SECURE_AUTH: ^~~~~~~~~~~~~~~~~ MYSQL_DEFAULT_AUTH /usr/local/Cellar/mysql/8.0.11/include/mysql/mysql.h:188:3: note: 'MYSQL_DEFAULT_AUTH' declared here MYSQL_DEFAULT_AUTH, ^ client.c:864:7: error: use of undeclared identifier 'boolval' boolval = (value == Qfalse ? 0 : 1); ^ client.c:865:17: error: use of undeclared identifier 'boolval' retval = &boolval; ^ client.c:896:38: error: use of undeclared identifier 'boolval' wrapper->reconnect_enabled = boolval; ^ client.c:1285:38: error: use of undeclared identifier 'MYSQL_SECURE_AUTH'; did you mean 'MYSQL_DEFAULT_AUTH'? return _mysql_client_options(self, MYSQL_SECURE_AUTH, value); ^~~~~~~~~~~~~~~~~ MYSQL_DEFAULT_AUTH /usr/local/Cellar/mysql/8.0.11/include/mysql/mysql.h:188:3: note: 'MYSQL_DEFAULT_AUTH' declared here MYSQL_DEFAULT_AUTH, ^ 12 errors generated. make: *** [client.o] Error 1 make failed, exit code 2 

我怎样才能完成工作?

您正在安装旧版本的gem(0.4.5)。 我有同样的问题(使用0.4.3)。 安装版本0.4.10为我解决了这个问题。

试试这个:

 gem install mysql2 -v 0.4.10 

如果安装Gemfile干净,则必须更新Gemfile以要求此版本:

 gem 'mysql2', '~> 0.4.10' 

不要安装更新版本的gem(即0.5.x),它们不适用于Rails 4或更早版本的Rails 5(5.0.7 / 5.1.6之前)(参见https://github.com) / brianmario / mysql2 / issues / 950 )。

尝试取消链接并重新安装mysql:

 brew unlink mysql brew cleanup brew install mysql gem install mysql2 

另一个对我有用的替代方案是安装MariaDB,这个版本特别是10.0.x版

 $ brew install mariadb@10.0 $ brew link mariadb@10.0 --force 

要自动启动MariaDB Server,请使用Homebrew的服务function,该function与macOS launchctl集成:

 brew services start mariadb@10.0 

现在,mysql2的安装将像魅力一样工作。

 $ gem install mysql2 -v '0.4.6' Building native extensions. This could take a while... Successfully installed mysql2-0.4.6