Lỗi khi cố gắng cài đặt ứng dụng bằng đá quý mysql2


84

Tôi đang cố gắng cài đặt một ứng dụng rails 3.2.21 mã nguồn mở sử dụng mysql2gem, nhưng khi tôi thử và chạy thông bundlethường, tôi gặp lỗi sau:

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

Tôi đã thử gỡ cài đặt mọi phiên bản mysqltôi đã cài đặt qua homebrew và cài đặt lại chúng, như sau:

brew uninstall --force mysql && brew install mysql

Sau đó chạy:

sudo gem install mysql2

Theo gợi ý của một số câu hỏi tương tự được hỏi trên đây, nhưng nó vẫn dẫn đến lỗi tương tự như trên.

Vui lòng ai đó có thể cung cấp hướng dẫn về cách thiết lập và chạy nó?


thử chạy "brew doctor" và kiểm tra xem có lỗi nào không. Nếu vậy, hãy làm theo hướng dẫn và thử lại.
michniewicz

Bạn đã cài đặt các phụ thuộc của gem chưa? github.com/brianmario/mysql2#general-instructions
lcguida

@ValAsensio, tôi thực lòng không đồng ý với bạn ở đó, tôi nghĩ bạn nên luôn cố gắng sử dụng db sản xuất của mình trong quá trình phát triển, nếu có thể. Tôi không bao giờ sử dụng sqlite trong quá trình phát triển, cũng như không làm việc cùng với bất kỳ ai.
niels,

@niels. Đúng. Tôi đồng ý với điều này "Tôi nghĩ bạn nên luôn cố gắng sử dụng db sản xuất của mình trong quá trình phát triển," Nhận xét cổ xưa này của tôi là vô ích. Tôi đã xóa nó.
Elvn

Câu trả lời:


54

Nhật ký lỗi cho biết:

ld: library not found for -lssl

Vì vậy, bạn cần cài đặt libssl:

brew install openssl

Như nó đã được chỉ ra trong các nhận xét, có thể cần phải xuất đường dẫn đến thư viện.

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

27
Đó là không đủ, Một nhu cầu xuất khẩu nó sau đó như thế này:export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/opt/openssl/lib/
Gilg Ngài

export LIBRARY_PATH = $ LIBRARY_PATH: / usr / local / opt / openssl / lib / `Hiệu quả với tôi sau một thời gian dài thử. Cám ơn!!
Abhi

161

Đối với bất kỳ ai vẫn gặp sự cố:

Khi bạn cài đặt openssl qua brew, bạn sẽ nhận được thông báo sau:

Apple đã ngừng sử dụng OpenSSL để ủng hộ các thư viện TLS và tiền điện tử của riêng mình

Nói chung không có hậu quả của điều này cho bạn. Nếu bạn xây dựng phần mềm của riêng mình và nó yêu cầu công thức này, bạn sẽ cần thêm các biến xây dựng của mình:

LDFLAGS: -L / usr / local / opt / openssl / lib
CPPFLAGS: -I / usr / local / opt / openssl / bao gồm
PKG_CONFIG_PATH: / usr / local / opt / openssl / lib / pkgconfig

Bạn có thể đặt các cờ xây dựng này (cho ứng dụng cục bộ) bằng cách chạy như sau:

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

Điều này đã làm việc cho tôi.

Xem tài liệu của gói để biết thêm thông tin.


79
Nếu bạn chỉ muốn sử dụng gem install, các công việc sau: gem install mysql2 -v '0.3.21' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
Niels

^^^ @niels nên là câu trả lời ... Alessandro's không hoạt động trên Sierra ("Cảnh báo: Từ chối liên kết: open ssl ..." -> điều gì đó liên quan đến hệ thống openssl không được dùng nữa)
the

2
Giải pháp của @ the12 niels là dành cho gem install, của tôi là dành cho bundle install. Chính xác thì bạn đang gặp vấn đề gì, bạn có thể đăng lỗi được không? Giải pháp tôi đã đăng vẫn hoạt động đối với tôi.
Alessandro Berardi

1
Tôi bắt đầu từ việc cố gắng tìm bundle installmột repo phụ thuộc vào mysql. Giải pháp của @ AlessandroBerardi không phù hợp với tôi; @niels 'đã làm. : /
vergenzt

3
--with-cppflags dường như bị hỏng trên OSX mới nhất. Tôi tin rằng nó có thể được bỏ qua. bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib"
Xavier Shay

36

Giải pháp cho tôi là cài đặt Công cụ dòng lệnh Xcode.

Gần đây tôi đã cập nhật Xcode thông qua Mac App Store và mỗi khi làm như vậy, tôi thấy rằng mình phải cài đặt lại Công cụ dòng lệnh một lần nữa.

xcode-select --install

34

Thử đi:

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

(Cập nhật phiên bản phù hợp)


1
Cho rằng thư viện SSL không được tìm thấy, đây là cách tiếp cận đúng và hoạt động tốt đối với tôi.
TehJabbit

2
Cài đặt đầu tiên brew install opensslsau đó gem install mysql2 -v '0.4.10' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include làm việc cho tôi, Cảm ơn!
Touseef Murtaza

1
@TouseefMurtaza câu trả lời của bạn phù hợp với tôi - cảm ơn bạn!
Jared

👋 Bản thân tương lai thân mến. Bây giờ bạn đã đọc câu trả lời này hai lần. Điều này được giải quyết nó cho tình huống của bạn! Bây giờ hãy ra ngoài và đổi thời gian của bạn để lấy mã và mã của bạn lấy tiền.
DaveWoodall.com

28

Dựa trên giải pháp tại đây

brew install openssl

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

Đã giải quyết vấn đề.


1
các exportthực sự giúp. ngay cả với openssl hiện có, đường dẫn vẫn bị thiếu.
Yakob Ubaidi

10

Cảm ơn @mudasobwa đã chỉ cho tôi đúng hướng. Hóa ra lỗi do một tệp openssl không được liên kết gây ra, vì vậy hãy chạy:

brew reinstall openssl && brew link openssl --force 

Đã giải quyết vấn đề. Tôi đã tìm thấy giải pháp ở đây: OpenSSL, RVM, Brew, lỗi xung đột


3

Sự kết hợp của các lệnh đã giải quyết nó cho tôi. Tôi đang ở trên Mojave.

brew reinstall openssl && brew link openssl --force

và sau đó

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


2

Sau khi cập nhật Homebrew (openssl@1.1), có một đường dẫn mới cho libs, vì vậy có thể sử dụng:

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

Nó sẽ sửa chữa ld: library not found for -lssl error


1

Có vẻ như bạn bỏ lỡ các tệp chính cần thiết để xây dựng mysql2đá quý

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

libsqlite3-dev không bắt buộc nhưng hãy cài đặt nó vì nó là DB rails mặc định.


-1

Tôi thấy rằng tôi phải sử dụng --with-opt-dir=/usr/local/opt.

Cụ thể, tôi đã thêm phần sau vào ~/.bundle/configtệp của mình :

BUNDLE_BUILD__MYSQL2: "--with-opt-dir=/usr/local/opt"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.