安装Mysql 2 gem失败

问题描述 投票:0回答:6

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

我已经使用 homebrew(版本 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

我怎样才能完成工作?

ruby-on-rails rubygems mysql2
6个回答
34
投票

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


3
投票

根据MySQL 5.7文档

MYSQL_SECURE_AUTH
在5.7中默认启用,因为mysql2无法编译低于版本
0.4.10
到MySQL => 5.7


2
投票

对我有用的另一种选择是安装 MariaDB,特别是版本 10.0.x

$ brew install [email protected]
$ brew link [email protected] --force

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

brew services start [email protected]

现在,mysql2 的安装将会顺利进行。

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

1
投票

我认为你可以删除 Gemfile.lock 中的所有内容。再次尝试

bundle install
后,您的项目将正常运行。


0
投票

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


0
投票

我刚刚成功使用 Ruby

mysql2-0.5.6
在 Windows 10 上安装
3.2.3
,如下:

  • 已安装MySQLConnector/C++ 8.3.0
  • 奔跑
    gem install mysql2 --platform=ruby -- --with-mysql-lib="C:\MySQL\MySQL Connector C++ 8.3\lib64"
© www.soinside.com 2019 - 2024. All rights reserved.