53

我正在新的macOS Sierra 中设置我的开发环境。

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

$ brew install mysql
$ mysql.server start

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

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

但它没有用。


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
4

12 回答 12

103

我只是遇到了同样的问题,尝试了上面列出的所有解决方案,然后开始用我的头撞他们的键盘几个小时。

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

xcode-select --install

一旦我这样做了,安装 mysql2 gem 就没有问题了。我希望这能解决问题!

于 2016-09-27T17:02:38.677 回答
68

当您通过 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"

这对我有用。

有关更多信息,请参阅捆绑器的文档

于 2016-09-22T00:34:38.817 回答
22

很多很棒的答案,我能够将它们组合成这样:

gem install mysql2 --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

因为我不舒服bundle config

于 2019-04-10T01:44:31.623 回答
12

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

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

brew install mysql56代替brew install mysql

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

brew link mysql56

之后我也跑了:

mysql.server start

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

于 2017-03-08T03:50:44.707 回答
9

使用 Mac OS 10.15 Catalina,当我尝试 Alessandro 的修复时,gem 和扩展可以正确安装但bundle install失败。起作用的只是:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"

没有这cppflags部分。

于 2019-11-08T23:24:26.270 回答
3

这对我有用。

最初我跑:

$ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

然后

$ bundle install

我在 /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"

其次是:

$ bundle install

哪个有效。

于 2020-03-11T18:02:13.747 回答
2

与@Caio Tarifa、Ruby 2.3.3、mysql 5.6 和 mysql2 几乎相同的场景。尝试了上面的几个解决方案,最后使它与@kylekeesling 的方法一起工作。

首先,@spickermann 尝试了解决方案 1:

brew reinstall openssl && brew link openssl --force

什么也没发生,显示相同的错误。

其次,尝试@Alessandro Berardi 的解决方案:

bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

这会产生不同但更多的错误,因为它会覆盖 gem 扩展的配置,因此所有 gem 扩展安装都失败了。

最后,尝试了@kylekeesling 解决方案:

xcode-select --install

它修复了 mysql gem 问题以及 nikogiri。由于我已经安装了 Xcode,在我的情况下,它重新安装了 Xcode 命令行工具。

于 2017-07-13T02:01:32.700 回答
1

尝试安装 xcode-select --install

于 2017-04-25T09:14:31.377 回答
1

所以我遇到了这个类似的问题,对我来说它原来是一个错误的 ruby​​ 版本和不兼容的 MySQL 版本。我在大多数项目中使用 ruby​​ 2.3,但继承了 2.1 项目。更改为 rvm 以使用 2.1 让我更进一步。

然后我发现了这个:https ://github.com/brianmario/mysql2/issues/603说你必须使用 mysql2 gem 版本大于 0.3.17 和 MySQL 版本 5.7

将 gem 更新到 0.3.17 并立即启动。希望这可以帮助某人。

于 2017-05-19T15:38:46.713 回答
0

如果以上都不起作用..就像我的情况一样,这样做可以解决问题 brew install openssl

仅供参考:我正在使用 MacOS Catalina

于 2019-11-17T17:41:24.167 回答
0

所以我在这里尝试了一切都无济于事。似乎是 ruby​​ 2.6.0 的问题,我降级到 2.3.4p301 并且一切正常(使用bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include"

于 2020-08-02T22:19:17.763 回答
-2

首先,您应该在这里尝试 2 答案 如果您安装了 openssl 但它仍然无法正常工作。您应该尝试刷新 gems 参考。A遇到了同样的问题,它对我有用。

gem source -r https://rubygems.org/

gem source -a https://rubygems.org/

于 2016-10-06T03:46:37.883 回答