无法安装旧的 mysql2 gem

Posted

技术标签:

【中文标题】无法安装旧的 mysql2 gem【英文标题】:Failure to install old mysql2 gem 【发布时间】:2018-12-18 23:52:24 【问题描述】:

我正在使用 Mac High Sierra。我将 Ruby 2.2.1 与 RVM 一起使用。我需要在这个 Ruby on Rails 应用程序中使用 mysql2。我确实安装了mysql 5.7。我确实安装了 xcode 和命令行工具。

我只是想让这个公司应用程序在我的本地机器上运行。我知道我非常接近,但是当我进行捆绑安装时出现最后一个错误当我到达 mysql2 gem 时收到以下错误:

Fetching mysql2 0.3.18
Installing mysql2 0.3.18 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/ahayden/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.18/ext/mysql2
/Users/ahayden/.rvm/rubies/ruby-2.2.1/bin/ruby -r ./siteconf20180710-52515-2hjll8.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
-----
Don't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load
-----
-----
Setting libpath to /usr/local/Cellar/mysql-connector-c/6.1.11/lib
-----
creating Makefile

current directory: /Users/ahayden/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.18/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/ahayden/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.18/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: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);
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~               ^~~~~~~~~~~~~~~~
2 warnings generated.
compiling mysql2_ext.c
compiling result.c
result.c:186:17: warning: comparison of integers of different signs: 'int' and 'unsigned long' [-Wsign-compare]
  for (i = 0; i < (len - 1); i++) 
              ~ ^  ~~~~~~~
1 warning generated.
linking shared-object mysql2/mysql2.bundle
ld: library not found for -l-lpthread
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [mysql2.bundle] Error 1

make failed, exit code 2

Gem files will remain installed in /Users/ahayden/.rvm/gems/ruby-2.2.1/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/ahayden/.rvm/gems/ruby-2.2.1/extensions/x86_64-darwin-17/2.2.0/mysql2-0.3.18/gem_make.out

An error occurred while installing mysql2 (0.3.18), and Bundler cannot continue.
Make sure that `gem install mysql2 -v '0.3.18'` succeeds before bundling.

In Gemfile:
  mysql2

我试过只安装没有特定 gem 版本的 mysql2 并且它可以工作,但它没有解决我的问题。它似乎归结为无法找到库-l-lpthread 的回溯的底部。请帮忙,我整天都在尝试这样做。

【问题讨论】:

你使用哪个命令安装mysql。 $brew 安装 mysql。如果您使用的是 rails 4,我建议您使用 mysql2 gem 和 0.4 系列。专门在你的 gemfile 中输入版本,然后做 bundle 不管怎样,我在通过 Homebrew 在 macOS (10.14.3) 上安装新版本的 MySQL (8.0.15) 时遇到了这个错误。无论如何,以下 Korayem 的解决方案对我有用。 【参考方案1】:

根据共享的描述,似乎无法安装 mysql 依赖项。

首先我们需要“定位 mysql_config”,然后将以下命令中的路径替换为该文件所在的位置。

gem install mysql2 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

【讨论】:

gem 是“mysql”还是“mysql2”? 是的,应该是gem install mysql2 -- —–with-mysql-config=/usr/whatever。在全新安装 osx 10.13.6 Ruby 2.5.1 上确认。【参考方案2】:

这为我解决了问题

gem install mysql2 -v '0.3.21' -- --with-cflags=\"-I/usr/local/opt/openssl/include\" --with-ldflags=\"-L/usr/local/opt/openssl/lib\"

安装openssl后

brew install openssl

【讨论】:

这适用于我在 OSX 10.14.2 上通过 brew 安装 MySQL 8.0.13。在找到此命令之前浪费了 3 小时。谢谢! @bxiong 也一样!我浪费了无数个小时在互联网的各个角落寻找解决方案。我告诉自己我必须回到 SO 分享这个以节省其他人的时间。很高兴它有帮助。快乐编码:) 在 macOS 10.14.3 上为我工作,通过 Homebrew 安装了 MySQL 8.0.15(最终用于使用 mysql2 gem v0.5.2 的 Rails 项目)。如果您使用的是最新的 macOS 和 MySQL 版本,并且还通过 Homebrew 安装了 openssl,建议您使用。否则,我不相信这个命令会对你有多大帮助。 另一个尝试:gem install mysql2 -- --with-opt-dir="$(brew --prefix openssl)" 在编译器错误为 ld: library not found for -lssl 时为我工作 @ASabourin 您应该将其发布为答案

以上是关于无法安装旧的 mysql2 gem的主要内容,如果未能解决你的问题,请参考以下文章

无法安装 mysql2 gem

无法在 Bigsur 上安装 mysql2 Gem

无法为 Rails 项目安装 mysql2 gem

如何在 Ubuntu 16.04 上安装 mysql2 [错误:安装 mysql2 时出错:错误:无法构建 gem 本机扩展。] [重复]

错误:安装 mysql2 时出错:错误:无法在 AWS Linux 上构建 gem 原生扩展

无法在 Windows 7 上安装 MySQL2 gem