安装旧版mysql2 gem失败问题

11
我使用的是Mac High Sierra操作系统,使用RVM安装了Ruby 2.2.1。在这个Ruby on Rails应用程序中,我需要使用mysql2。我已经安装了mysql 5.7,并且已经安装了Xcode和命令行工具。
我只是想让这个公司的应用程序在我的本地机器上运行。我知道我离成功很近,但当我执行bundle install时,当我到达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

我尝试安装mysql2时没有指定gem版本,它可以工作,但是它没有解决我的问题。 似乎问题出在回溯的底部,找不到库-l-lpthread。请帮忙,我一整天都在尝试。


你用了哪个命令来安装mysql?$brew install mysql。如果你正在使用Rails 4,我建议你使用mysql2 gem的0.4系列。具体来说,在你的gemfile中输入版本,然后执行bundle。 - Bijendra
说句实话,我在通过Homebrew在macOS(10.14.3)上安装新版本的MySQL(8.0.15)时遇到了这个错误。无论如何,Korayem下面的解决方案对我有效。 - CFitz
2个回答

48

这个解决了我的问题

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

3
这个命令在我使用的OSX 10.14.2系统上可行,MySQL版本是通过brew安装的8.0.13。在找到这个命令前浪费了3个小时,谢谢! - bxiong
3
@bxiong 我也一样!我浪费了无数个小时在互联网的角落里寻找解决方案。我告诉自己我必须回到SO分享这个,以节省其他人的时间。很高兴它有帮助。祝编码愉快 :) - Korayem
在我的macOS 10.14.3上,通过Homebrew安装的MySQL 8.0.15(最终用于一个使用mysql2 gem v0.5.2的Rails项目)运行良好。如果你正在使用较新版本的macOS和MySQL,并且还通过Homebrew安装了openssl,则建议使用此方法。否则,我认为这个命令对你来说可能没有太大作用。 - CFitz
5
可以尝试另一种方法:gem install mysql2 -- --with-opt-dir="$(brew --prefix openssl)"。当编译器出现ld: library not found for -lssl错误时,这个方法对我很有效。 - ASabourin
@ASabourin 你应该将那个作为答案发布。 - Reidsy
@ASabourin 同意!在 Mojave 上更新 XCode 后,这也是我的“-lssl 找不到库”的解决方案。 - bryanus

8
根据所分享的描述,似乎无法安装mysql依赖项。
首先,我们需要“定位mysql_config”,然后将该文件所在路径替换为以下命令中的路径。
gem install mysql2 -- --with-mysql-config=/usr/local/mysql/bin/mysql_config

2
宝石是“mysql”还是“mysql2”? - Andrew Grimm
是的,应该这样写:gem install mysql2 -- —–with-mysql-config=/usr/whatever。在新安装的OSX 10.13.6 Ruby 2.5.1上确认过了。 - genkilabs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接