N'importe quelle raison pour laquelle cette erreur est apparue lorsque j'ai essayé de regrouper une application: j'ai essayé d'installer gem install mysql2 -v '0.3.21' comme ils le recommandent, mais il ne peut pas installer correctement. Je lance également ceci sur macOS High Sierra. Désolé pour ma mauvaise formulation pour cette question, car c'est ma première fois que je travaille avec Ruby.
To see why this extension failed to compile, please check the mkmf.log which can be found here:
/Users/yamanshrestha/Desktop/Dorsata/vendor/bundle/Ruby/2.3.0/extensions/universal-darwin-17/2.3.0/mysql2-0.3.21/mkmf.log
current directory: /Users/yamanshrestha/Desktop/Dorsata/vendor/bundle/Ruby/2.3.0/gems/mysql2-0.3.21/ext/mysql2
make "DESTDIR=" clean
current directory: /Users/yamanshrestha/Desktop/Dorsata/vendor/bundle/Ruby/2.3.0/gems/mysql2-0.3.21/ext/mysql2
make "DESTDIR="
compiling infile.c
compiling client.c
client.c:439:3: error: use of undeclared identifier 'my_bool'
my_bool res = mysql_read_query_result(client);
^
client.c:441:19: error: use of undeclared identifier 'res'
return (void *)(res == 0 ? Qtrue : Qfalse);
^
client.c:762:3: error: use of undeclared identifier 'my_bool'
my_bool boolval;
^
client.c:793:7: error: use of undeclared identifier 'boolval'
boolval = (value == Qfalse ? 0 : 1);
^
client.c:794:17: error: use of undeclared identifier 'boolval'
retval = &boolval;
^
client.c:797: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:798:7: error: use of undeclared identifier 'boolval'
boolval = (value == Qfalse ? 0 : 1);
^
client.c:799:17: error: use of undeclared identifier 'boolval'
retval = &boolval;
^
client.c:830:38: error: use of undeclared identifier 'boolval'
wrapper->reconnect_enabled = boolval;
^
client.c:1185: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,
^
10 errors generated.
make: *** [client.o] Error 1
make failed, exit code 2
Gem files will remain installed in /Users/yamanshrestha/Desktop/Dorsata/vendor/bundle/Ruby/2.3.0/gems/mysql2-0.3.21 for inspection.
Results logged to /Users/yamanshrestha/Desktop/Dorsata/vendor/bundle/Ruby/2.3.0/extensions/universal-darwin-17/2.3.0/mysql2-0.3.21/gem_make.out
An error occurred while installing mysql2 (0.3.21), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.21' --source 'http://rubygems.org/'` succeeds before bundling.
J'ai donc réussi à résoudre le problème par moi-même après avoir regardé un peu. Fondamentalement, la version de mysql2 qui était écrite dans le gemfile était obsolète par rapport au code écrit, donc la différence de syntaxe entre les versions causait cette erreur lors de l'installation de mysql2. Par conséquent, pour résoudre ce problème, vous devez aller dans votre gemfile puis changer le numéro de version de mysql2. J'ai changé les mines comme suit:
gem 'mysql2', '~> 0.4.10'
enregistrez le fichier et essayez de réinstaller et il devrait fonctionner
Correction en rétrogradant mon mysql. Et compilez mysql2 en utilisant mysql v5.7.
Pour les utilisateurs Mac:
brew install [email protected]
gem install mysql2 -v '0.3.21' -- --with-mysql-include=/usr/local/Cellar/[email protected]/5.7.25/include/mysql --with-mysql-lib=/usr/local/Cellar/[email protected]/5.7.25/lib
Référence: https://github.com/brianmario/mysql2#configuration-options
J'ai eu le même problème. Comme vous pouvez le voir dans l'erreur, il y a un problème d'interprétation du code. Cela est dû à l'inadéquation entre les versions de mysql2 écrites dans gemfile et utilisées dans le code. Pour résoudre ceci, je lance:
- gem installe mysql2 (il installera la dernière version de msql2)
- dans mon gemfile, j'ai changé: gem 'mysql2', '~> 0.3.1' to gem 'mysql2'
Pour moi, la solution était d'installer mysql-connector-c, brew install mysql-connector-c
. Dans mon cas particulier, il était déjà installé, mais j'ai dû le reconnecter avec écrasement forcé (les messages dans la console vous diront exactement quoi faire dans votre situation).