Установка Mysql 2 gem не выполняется
Я пытаюсь установить mysql2 (версия 0.4.5), и я использую Rails 5.0.2, Ruby 2.3.1
Я уже установил сервер mysql с помощью homebrew (версия 8.0.11) и начал 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/[email protected]/gems/mysql2-0.4.5/ext/mysql2
creating Makefile
current directory: /Users/gomathi/.rvm/gems/[email protected]/gems/mysql2-0.4.5/ext/mysql2
make "DESTDIR=" clean
current directory: /Users/gomathi/.rvm/gems/[email protected]/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
Как я могу выполнить эту работу?.
Ответы
Ответ 1
Вы устанавливаете более старую версию драгоценного камня (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).
Ответ 2
Попробуйте отключить и переустановить mysql:
brew unlink mysql
brew cleanup
brew install mysql
gem install mysql2
Ответ 3
Другой альтернативой, которая работала для меня здесь, была установка MariaDB, что тоже специально версия 10.0.x
$ brew install [email protected]
$ brew link [email protected] --force
Чтобы автоматически запускать сервер MariaDB, используйте функциональность служб 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
Ответ 4
Я сделал это, установив MySQL из пакета dmg https://dev.mysql.com/downloads/mysql/5.7.html#downloads
Ответ 5
Согласно MySQL 5.7 документ MYSQL_SECURE_AUTH
был включен по умолчанию в 5.7, из-за чего mysql2 не компилируется ниже версии 0.4.10
в MySQL => 5.7.
Ответ 6
Я думаю, что вы можете удалить все в Gemfile.lock. После попытки bundle install
снова, и ваш проект будет работать нормально.