Skip to main content
 首页 » 编程设计

ruby-on-rails之安装 Mysql 2 gem 失败

2025年02月15日15over140

我正在尝试安装 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需要这个版本:
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)。