无法在macOS Sierra

时间:2016-09-21 13:19:47

标签: mysql ruby macos rubygems macos-sierra

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

首先,我安装了 Rbenv Ruby(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

13 个答案:

答案 0 :(得分:98)

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

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

xcode-select --install

有一次我做了mysql2 gem安装没有问题。我希望有这个诀窍!

答案 1 :(得分:53)

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

这对我有用。

有关详细信息,请参阅bundler's documentation

答案 2 :(得分:12)

我在这里分享我的解决方案,因为其他答案都没有用。

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

brew install mysql56代替brew install mysql

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

brew link mysql56

我之后也跑了:

mysql.server start

最后一步可能没必要,但只是以防万一。

答案 3 :(得分:3)

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

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不满意

答案 4 :(得分: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中收到错误:

叮当声:错误:不支持的选项'--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

曾工作过。

答案 5 :(得分:1)

尝试安装xcode-select --install

答案 6 :(得分:1)

所以我遇到了类似的问题,对我而言,事实证明这是一个错误的ruby版本和不兼容的MySQL版本。我在大多数项目中都使用了ruby 2.3,但继承了2.1项目。改用rvm使用2.1让我更进一步。

然后我发现:https://github.com/brianmario/mysql2/issues/603表示你必须使用MySQL版本5.7的mysql2 gem版本大于0.3.17

将gem更新为0.3.17,然后向右射击。希望这有助于某人。

答案 7 :(得分:1)

几乎与@Caio Tarifa,Ruby 2.3.3,mysql 5.6和mysql2相同。尝试了上面的几个解决方案,最后使用@ kylekeesling的方法。





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


& #xA;
  brew重新安装openssl&& brew链接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解决方案:


&#xA ;
  xcode-select --install
  




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




答案 8 :(得分:1)

使用Mac OS 10.15 Catalina尝试亚历山德罗(Alessandro)的修复程序时,gem和扩展名可以正确安装,但bundle install失败。起作用的只是:

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

没有cppflags部分。

答案 9 :(得分:0)

我有这样的问题。希望这会有用。

brew install mysql@5.6

brew link mysql@5.6 --force

bundle install

这个answer帮助我!

答案 10 :(得分:0)

如果上述方法均不起作用,如我的情况,则解决了此问题 brew install openssl

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

答案 11 :(得分: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"

答案 12 :(得分:-2)

首先,您应该在here中尝试2回答 如果您安装了openssl但它仍然无法正常工作。你应该尝试刷新宝石参考。 A得到了同样的问题,它对我有用。

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

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