尝试捆绑应用程序时出现此错误的任何原因: 我已尝试按照他们的建议安装gem install mysql2 -v'0.3.21',但无法正确安装。我也在macOS High Sierra上运行它。很抱歉我这个问题的措辞不好,因为这是我第一次与红宝石合作。
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.
答案 0 :(得分:4)
因此,环顾四周后,我设法自己解决了这个问题。基本上,与编写的代码相比,在gemfile中编写的mysql2版本已过时,因此,在尝试安装mysql2时,版本之间的语法差异导致此错误。因此,要解决此问题,您必须转到您的gemfile,然后更改mysql2的版本号。我将地雷更改为以下内容:
gem 'mysql2', '~> 0.4.10'
保存文件,然后尝试重新安装,应该会出现问题
答案 1 :(得分:2)
通过降级我的mysql来解决。然后使用mysql v5.7编译mysql2。
对于Mac用户:
brew install mysql@5.7
gem install mysql2 -v '0.3.21' -- --with-mysql-include=/usr/local/Cellar/mysql@5.7/5.7.25/include/mysql --with-mysql-lib=/usr/local/Cellar/mysql@5.7/5.7.25/lib
参考:https://github.com/brianmario/mysql2#configuration-options
答案 2 :(得分:1)
对于ubuntu来说,这帮助了我
sudo apt-get -f install
sudo apt-get update
sudo apt-get install libmysqlclient-dev
bundle install
找到了这个
答案 3 :(得分:0)
我有同样的问题。正如您在错误中看到的那样,存在代码解释问题。这是由用gemfile编写并在代码中使用的mysql2版本之间不匹配引起的。
要解决,我运行:
-gem install mysql2(它将安装最新的msql2版本)
-在我的gemfile中,我将 gem'mysql2','〜> 0.3.1'更改为 gem'mysql2'
答案 4 :(得分:0)
对我来说,解决方案是安装mysql-connector-c brew install mysql-connector-c
。在我的特定情况下,它已经安装了,但是我不得不通过强制覆盖将其重新链接(控制台中的消息会告诉您确切的情况)。