我在新的 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
答案 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)
答案 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/