尝试使用mysql2 gem安装应用程序时出错

时间:2015-06-14 20:53:04

标签: mysql ruby-on-rails ruby ruby-on-rails-4 mysql2

我试图安装一个使用mysql2 gem的开源rails 3.2.21应用程序,但是当我尝试运行bundle commant时,我收到以下错误:

Fetching: mysql2-0.3.18.gem (100%)
Building native extensions.  This could take a while...
p
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

    /Users/my_username/.rvm/rubies/ruby-2.1.2/bin/ruby -r ./siteconf20150614-72129-orqsb7.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()... yes
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/5.6.25/lib
-----
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling client.c
compiling infile.c
compiling mysql2_ext.c
compiling result.c
linking shared-object mysql2/mysql2.bundle
ld: warning: directory not found for option '-L/Users/travis/.sm/pkg/active/lib'
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/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/gems/mysql2-0.3.18 for inspection.
Results logged to /Users/my_username/.rvm/rubies/ruby-2.1.2/lib/ruby/gems/2.1.0/extensions/x86

我尝试卸载通过自制程序安装的每个mysql版本并重新安装它们,如下所示:

brew uninstall --force mysql && brew install mysql

然后跑步:

sudo gem install mysql2

正如此处提出的一些类似问题所示,但仍然会产生与上述相同的错误。

有人可以就如何启动和运行提供指导吗?

13 个答案:

答案 0 :(得分:124)

对于任何仍然遇到此问题的人:

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

答案 1 :(得分:35)

我的解决方案是安装Xcode命令行工具。

我最近通过Mac App Store更新了Xcode,每次我这样做,我都发现我必须重新安装命令行工具。

xcode-select --install

答案 2 :(得分:9)

尝试一下:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

(适当更新版本)

答案 3 :(得分:6)

错误日志显示:

ld: library not found for -lssl

因此,您需要安装libssl

brew install openssl

希望它有所帮助。

答案 4 :(得分:6)

感谢@mudasobwa指出我正确的方向。事实证明错误是由未链接的openssl文件引起的,因此运行:

brew reinstall openssl && brew link openssl --force 

解决了这个问题。我在这里找到了解决方案:OpenSSL, RVM, Brew, conflicting error

答案 5 :(得分:2)

sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target /

从这里: https://gorails.com/setup/osx/10.14-mojave

答案 6 :(得分:2)

基于解决方案here

brew install openssl

export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/

解决了问题。

答案 7 :(得分:2)

在Homebrew更新(openssl@1.1)之后,有一个用于libs的新路径,因此可以使用:

bundle config build.mysql2 --with-opt-dir=$(brew --prefix openssl)
bundle install

它将修复ld: library not found for -lssl error

答案 8 :(得分:1)

命令的组合解决了它。我在莫哈韦沙漠上。

brew reinstall openssl && brew link openssl --force

然后

gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

答案 9 :(得分:1)

似乎您错过了构建mysql2 gem所需的主要文件

sudo apt-get install libsqlite3-dev libmysqlclient-dev -y

libsqlite3-dev不是强制性的,但由于它是默认的Rails DB,因此必须安装。

答案 10 :(得分:0)

在 MacBook air M1(macOS) 上它对我有用。

安装 zstd

<块引用>

brew install zstd

安装mysql2

<块引用>

gem install mysql2 -v '0.5.3' -- --with-opt-dir=$(brew --prefix openssl) --with-ldflags=-L/opt/homebrew/Cellar/zstd/1.5. 0/库

答案 11 :(得分:0)

Mac Catalina 使用 Homebrew 修复: gem install mysql2 -- --with-opt-dir="$(brew --prefix openssl)"

答案 12 :(得分:-1)

我发现我必须使用self.navigationController?.setNavigationBarHidden(true, animated: false)

具体来说,我在--with-opt-dir=/usr/local/opt文件中添加了以下内容:

~/.bundle/config