Ошибка установки mysql2: ОШИБКА: не удалось создать собственное расширение gem - PullRequest
0 голосов
/ 30 октября 2018

Я использую (Mac Os)

gem 'rails', '~> 4.2.0'             # rails edge
ruby '2.2.0'
gem 'mysql2'

После запуска bundle я получил эту ошибку

Произошла ошибка при установке mysql2 (0.3.17), и Bundler не может Продолжить. Убедитесь, что gem install mysql2 -v '0.3.17' успешно до комплектации.

Так что, как и предполагалось, я запускаю

gem install mysql2 -v '0.3.17'

И я получаю эту ошибку постоянно, хотя я пробовал много решений, к сожалению, не повезло

> adware:page365 apple$ gem install mysql2 -v '0.3.17 ' Error loading
> RubyGems plugin
> "/Users/apple/.rvm/gems/ruby-2.2.0/gems/yard-0.8.7.6/lib/rubygems_plugin.rb":
> can't modify frozen Hash (RuntimeError) Building native extensions.
> This could take a while... ERROR:  Error installing mysql2:   ERROR:
> Failed to build gem native extension.
> 
>     current directory: /Users/apple/.rvm/gems/ruby-2.2.0/gems/mysql2-0.3.17/ext/mysql2
> /Users/apple/.rvm/rubies/ruby-2.2.0/bin/ruby -r
> ./siteconf20181030-12196-9cfizd.rb extconf.rb checking for
> ruby/thread.h... yes checking for rb_thread_call_without_gvl() in
> ruby/thread.h... yes checking for rb_thread_blocking_region()... no
> checking for rb_wait_for_single_fd()... yes checking for
> rb_hash_dup()... yes checking for rb_intern3()... yes
> ----- Using mysql_config at /usr/local/bin/mysql_config
> ----- checking for mysql.h... yes checking for errmsg.h... yes checking for mysqld_error.h... yes
> ----- Setting rpath to /usr/local/Cellar/mysql/8.0.12/lib
> ----- creating Makefile
> 
> current directory:
> /Users/apple/.rvm/gems/ruby-2.2.0/gems/mysql2-0.3.17/ext/mysql2 make
> "DESTDIR=" clean
> 
> current directory:
> /Users/apple/.rvm/gems/ruby-2.2.0/gems/mysql2-0.3.17/ext/mysql2 make
> "DESTDIR=" compiling infile.c compiling client.c client.c:359:33:
> warning: implicit conversion loses integer precision: 'long' to
> 'unsigned int' [-Wshorten-64-to-32]
>         elapsed_time = end_time - start_time;
>                      ~ ~~~~~~~~~^~~~~~~~~~~~ client.c:431:3: error: use of undeclared identifier 'my_bool'   my_bool res =
> mysql_read_query_result(client);   ^ client.c:433: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.12/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:1163:56: warning: implicit conversion loses integer precision: 'size_t' (aka 'unsigned
> long') to 'unsigned int' [-Wshorten-64-to-32]   mysql2rb =
> mysql2_mysql_enc_name_to_rb(charset_name, charset_name_len);
>              ~~~~~~~~~~~~~~~~~~~~~~~~~~~               ^~~~~~~~~~~~~~~~ client.c:1196: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.12/include/mysql/mysql.h:188:3: note:
> 'MYSQL_DEFAULT_AUTH' declared here   MYSQL_DEFAULT_AUTH,   ^ 2
> warnings and 10 errors generated. make: *** [client.o] Error 1
> 
> make failed, exit code 2
> 
> Gem files will remain installed in
> /Users/apple/.rvm/gems/ruby-2.2.0/gems/mysql2-0.3.17 for inspection.
> Results logged to
> /Users/apple/.rvm/gems/ruby-2.2.0/extensions/x86_64-darwin-18/2.2.0/mysql2-0.3.17/gem_make.out

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Установить gem после установки mysql2 зависимости

brew install mysql-client libmysqlclient-dev
0 голосов
/ 30 октября 2018

Чтобы исправить это, я просто устанавливаю mysql2 gem, используя bundler.

установить mysql2 gem:

$ bundle install
$ bundle exec gem install mysql2
...