无法在macOS Sierra上安装mysql2 gem

Cai*_*ifa 46 ruby mysql macos rubygems macos-sierra

我正在新的macOS Sierra setting中建立我的开发环境.

首先,我安装了Rbenv,Ruby(2.3.1),Homebrew等最新版本的MySQL(5.7.15).

$ brew install mysql
$ mysql.server start
Run Code Online (Sandbox Code Playgroud)

好的,MySQL已初始化.是时候安装mysql2 gem了......

$ gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config
Run Code Online (Sandbox Code Playgroud)

但它没有用.


Building native extensions with: '--with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config'
This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
/Users/macuser/.rbenv/versions/2.3.1/bin/ruby -r ./siteconf20160921-16853-x1boio.rb extconf.rb --with-mysql-config=/usr/local/Cellar/mysql/5.7.15/bin/mysql_config
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/Cellar/mysql/5.7.15/bin/mysql_config
-----
checking for mysql.h... yes
checking for errmsg.h... yes
checking for mysqld_error.h... yes
-----
Dont 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/5.7.15/lib
-----
creating Makefile

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.4/mkmf.log

current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
make "DESTDIR=" clean

current directory: /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4/ext/mysql2
make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
compiling statement.c
linking shared-object mysql2/mysql2.bundle
ld: library not found for -lssl
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/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/mysql2-0.4.4 for inspection.
Results logged to /Users/macuser/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/extensions/x86_64-darwin-16/2.3.0-static/mysql2-0.4.4/gem_make.out
Run Code Online (Sandbox Code Playgroud)

小智 100

我遇到了同样的问题,尝试了上面列出的所有解决方案,然后开始对着他们的键盘敲了几个小时.

然后我想尝试安装/重新安装Xcode命令行工具:

xcode-select --install
Run Code Online (Sandbox Code Playgroud)

一旦我这样做了mysql2 gem安装没有问题.我希望这就是诀窍!

  • 在我的10.12.4上只是说`xcode-select:错误:已经安装了命令行工具,使用"软件更新"来安装更新`.还有其他方法可以强行重装吗? (8认同)

Ale*_*rdi 60

当您通过brew安装openssl时,您应该收到以下消息:

Apple不赞成使用OpenSSL来支持自己的TLS和加密库

一般来说,这对您没有任何影响.如果您构建自己的软件并且需要此公式,则需要添加到构建变量中:

LDFLAGS:-L/usr/local/opt/openssl/lib
CPPFLAGS:-I/usr/local/opt/openssl/include
PKG_CONFIG_PATH:/ usr/local/opt/openssl/lib/pkgconfig

您可以通过运行以下命令来设置这些构建标志(对于本地应用程序):

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
Run Code Online (Sandbox Code Playgroud)

这对我有用.

有关更多信息,请参阅bundler的文档.

  • 谢谢上帝...亚历山德罗,Lady Gaga应该唱一首关于你的歌 (2认同)
  • 命令后的响应:“您正在替换 build.mysql2 的当前本地值,当前为 nil”,在此工作后运行“bundle install” (2认同)

Stu*_*nig 12

我在这里分享我的修复,因为其他答案不起作用.

对于我的环境,我需要MySQL 5.6所以我不得不使用:

brew install mysql56 代替 brew install mysql

捆绑安装mysql2 gem一直失败,直到:

brew link mysql56

之后我也跑了:

mysql.server start

最后一步可能是不必要的,但以防万一.


小智 10

很多很棒的答案,我能够将它们合并为:

gem install mysql2 --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
Run Code Online (Sandbox Code Playgroud)

因为我不适应 bundle config


Fed*_*d C 8

在 Mac OS 10.15 Catalina 中,当我尝试 Alessandro 的修复时,gem 和扩展可以正确安装但bundle install失败。有效的是:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Run Code Online (Sandbox Code Playgroud)

没有cppflags部分。


小智 5

这对我有用。

最初我跑的是:

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"
Run Code Online (Sandbox Code Playgroud)

然后

$ bundle install
Run Code Online (Sandbox Code Playgroud)

我在 /Users/.../.bundle/ruby/2.5.0/extensions/x86_64-darwin-18/2.5.0/mysql2-0.5.3/mkmf.log 中收到错误:

clang:错误:不支持的选项 '--with-cppflags=-I/usr/local/opt/openssl/include'

所以我删除了“--with-cppflags=-I/usr/local/opt/openssl/include”

然后跑:

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Run Code Online (Sandbox Code Playgroud)

其次是:

$ bundle install
Run Code Online (Sandbox Code Playgroud)

这有效。