安装 Mysql 2 gem 失败

Posted

技术标签:

【中文标题】安装 Mysql 2 gem 失败【英文标题】:Installing Mysql 2 gem fails 【发布时间】:2018-11-27 07:50:41 【问题描述】:

我正在尝试安装 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

我怎样才能完成工作?

【问题讨论】:

我今天也有同样的问题(MacOS 10.13)。这以前可以工作。不确定发生了什么变化。 实际上,我看到您使用的是旧版本的 gem(0.4.5 - 我使用的是 0.4.3)。您是否尝试过更新的版本?我能够成功安装当前版本 (0.5.1)(使用 gem install mysql2),但 0.4.3 版本在我的系统上失败。 实际上,我刚刚了解到 0.5.x 版本不适用于任何 Rails 4 应用程序和一些 Rails 5 应用程序(取决于点发布)。在 0.4.x 发布行中尝试更新版本的 gem,例如 0.4.10。 【参考方案1】:

我认为您可以删除 Gemfile.lock 中的所有内容。再次尝试bundle install 后,您的项目将正常运行。

【讨论】:

【参考方案2】:

根据 MySQL 5.7 文档MYSQL_SECURE_AUTH 已经在 5.7 中默认启用,因为 mysql2 不能编译低于版本 0.4.10 到 MySQL => 5.7

https://github.com/brianmario/mysql2/releases/tag/0.4.10 https://github.com/brianmario/mysql2/issues/891 https://dev.mysql.com/doc/refman/5.6/en/mysql-options.html

【讨论】:

【参考方案3】:

我通过从 dmg 包安装 MySQL 使其工作 https://dev.mysql.com/downloads/mysql/5.7.html#downloads

【讨论】:

【参考方案4】:

另一个对我有用的替代方法是安装 MariaDB,也就是 10.0.x 版

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

要自动启动 MariaDB 服务器,请使用 Homebrew 的服务功能,它与 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

【讨论】:

为我工作!!!【参考方案5】:

您正在安装较旧版本的 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)。

【讨论】:

感谢克里斯的回答。是的,它在 0.4.5 版本失败。但安装在最新版本中。 @Gomathi 如果解决了您的问题,请将此答案标记为正确。 天哪!那是 2k19...谢谢,您节省了我的时间!【参考方案6】:

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

brew unlink mysql
brew cleanup
brew install mysql
gem install mysql2

【讨论】:

似乎有点核? (不是我的-1,只是评论)

以上是关于安装 Mysql 2 gem 失败的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 安装:错误:无法构建 gem 原生扩展

安装gem em-websocket失败

gem 安装失败,openssl 失败

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)

Gitlab 安装“gem”失败

如果由于权限错误而失败,如何安装 gem 或更新 RubyGems