Cài đặt Ruby gem mysql2 không thành công


75

Khi tôi cố gắng cài đặt gem mysql2, nó không thành công mà không có lỗi rõ ràng. Có ai biết phải làm gì để giải quyết vấn đề này để cài đặt mysql2 không?

$ sudo gem install mysql2
Building native extensions.  This could take a while...
ERROR:  Error installing mysql2:
    ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
checking for rb_thread_blocking_region()... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lmygcc... no
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
    --with-opt-dir
    --without-opt-dir
    --with-opt-include
    --without-opt-include=${opt-dir}/include
    --with-opt-lib
    --without-opt-lib=${opt-dir}/lib
    --with-make-prog
    --without-make-prog
    --srcdir=.
    --curdir
    --ruby=/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby
    --with-mysql-config
    --without-mysql-config
    --with-mysql-dir
    --without-mysql-dir
    --with-mysql-include
    --without-mysql-include=${mysql-dir}/include
    --with-mysql-lib
    --without-mysql-lib=${mysql-dir}/lib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-mlib
    --without-mlib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-zlib
    --without-zlib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-socketlib
    --without-socketlib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-nsllib
    --without-nsllib
    --with-mysqlclientlib
    --without-mysqlclientlib
    --with-mygcclib
    --without-mygcclib
    --with-mysqlclientlib
    --without-mysqlclientlib


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/ext/mysql2/gem_make.out

Câu trả lời:


29

Bạn phải cài đặt MySQL 64-bit trên máy của mình, cộng với các công cụ xây dựng bạn nhận được khi cài đặt xcode.


3
Điều đó đã giải quyết nó. Đã cài đặt MySQL 64-bit trên máy tính của tôi thông qua liên kết bên dưới và tất cả đều hoạt động tốt. Cảm ơn!
Tanner

18
vâng - brew install mysqlvà sau đó gem install mysql không có vấn đề - thx!
froderik

146

Ubuntu:

sudo apt-get install libmysqlclient-dev  #(mysql development headers)
sudo gem install mysql2 -- --with-mysql-dir=/etc/mysql/

Đó là nó!

Kết quả:

Building native extensions. This could take a while...
Successfully installed mysql2-0.2.6
1 gem installed
Installing ri documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Result not known
Enclosing class/module 'mMysql2' for class Client not known
Installing RDoc documentation for mysql2-0.2.6...
Enclosing class/module 'mMysql2' for class Result not known
Enclosing class/module 'mMysql2' for class Client not known

3
Rất tiếc, apt vẫn chưa có trên OSX. Nhưng cách tiếp cận của bạn thực sự hoạt động trên Debian / Ubuntu.
Holger Just vào

6
Tôi không hiểu làm thế nào mà điều này lại có nhiều lượt ủng hộ khi nó không tương ứng với câu hỏi.
WattsInABox 19/12/11

19
Nó có rất nhiều ủng hộ vì những người khác (như tôi) đã thấy điều này hữu ích. Nó đã giải quyết được vấn đề của tôi.
John

2
Vấn đề là cùng một vấn đề nhưng trên một hệ điều hành khác nhau
Abe Petrillo

6
Vui lòng không điều đó trên Ubuntu 13, ít nhất, bạn không cần phải chỉ định with-mysql-dir. Chỉ cần cài đặt libmysqlclient-devvà sau đó chạy bundle installvà nó sẽ hoạt động.
Josh M.

41

Bạn cần các tiêu đề phát triển MySQL cho mysql2 để biên dịch đúng cách. Điều này là cần thiết, vì nhiều chức năng được viết bằng C và sau đó được liên kết với MySQL.

Một giải pháp là trỏ trình cài đặt gem tới thư mục cài đặt mysql của bạn một cách rõ ràng như vậy

gem install mysql2 -- --with-mysql-dir=/usr/local/mysql
# or where ever you installed your mysql server to

hoặc bằng cách cài đặt máy chủ mysql đến một vị trí đã biết (ví dụ: bằng cách sử dụng homebrew .) và sau đó cài đặt gem

# install the mysql server locally
brew install mysql
# install the gem
gem install mysql2

Cả hai cách tiếp cận đều yêu cầu bạn cài đặt XCode để có trình biên dịch GCC cần thiết.


Giải pháp nấu bia phù hợp nhất với tôi. Nếu bạn cài đặt Mac OS X MySQL nhị phân, hãy đảm bảo sử dụng phiên bản 64bit.
Jason

Cảm ơn, --with-mysql-dir=tùy chọn chỉ là những gì tôi cần để giải quyết vấn đề của mình.
Tobias Cohen

Đối với tôi, --with-mysql-dirthực sự đã gây ra một vấn đề. Tôi chỉ để nó tắt và để nó cài đặt vào một thư mục mặc định. Tôi chỉ trực tiếp cài đặt một phiên bản cụ thể vớigem install mysql2 -v '0.3.18'
user2490003

Thanks: Điều này làm việc cho tôi: ==> sudo gem install mysql2 - --with-mysql-dir = / usr / local / mysql
Arunabh Das

25

Với Brew và MySQL được cài đặt, tôi đã sử dụng phần sau để cài đặt gem mysql2

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

Nếu bạn đang sử dụng Bundler, bạn có thể nói với Bundler về điều này bằng lệnh:

bundle config build.mysql2 --with-mysql-config=/usr/local//Cellar/mysql/5.5.10/bin/mysql_config

Như tài liệu ở đây: http://gembundler.com/man/bundle-config.1.html


1
Điều này cũng hoạt động nếu bạn đang sử dụng phiên bản brew để cài đặt phiên bản cũ, ví dụ: brew install mysql51, gem install mysql2 -v '0.3.13' - --with-mysql-config = / usr / local / Cellar / mysql51 / 5.1 .71 / bin / mysql_config (về sư tử núi)
nruth

giải pháp duy nhất cho vấn đề kỳ lạ này trong MacOS!
kevinluo201


6

Ubuntu 15.04:

sudo apt-get install libmysqlclient-dev
sudo gem install mysql2

Ubuntu-16.04:

sudo apt-get install ruby-mysql2
sudo gem install mysql2

Đầu ra:

Building native extensions.  This could take a while...
Successfully installed mysql2-0.3.19
Parsing documentation for mysql2-0.3.19
Installing ri documentation for mysql2-0.3.19
Done installing documentation for mysql2 after 0 seconds
1 gem installed


1

Tôi đã tìm hiểu về Internet và Stack Overflow trong 2 ngày, và phải đến khi tôi tìm thấy liên kết này và sau đó bắt đầu làm việc với vé này cho mysql2 thì tôi mới thực sự giải quyết được vấn đề.

Với thiết lập của tôi (như đã giải thích trong vé), trình biên dịch chuyển đổi -Wno-null-convert -Wno-used-private-field sẽ bị hỏng và cho tôi một lỗi không chính xác, đó là:

mysql.h is missing. please check your installation of mysql and try again

1

Tôi đã giải quyết vấn đề này bằng cách xác định cụ thể vị trí của các thư mục, không cần cài đặt lại bất cứ thứ gì , với brew hoặc macports hoặc bất cứ thứ gì, chỉ bằng cách chỉ định những thứ ở đâu (chỉ một điều: ruby ​​trên máy mac của tôi đã được cài đặt với rvm, tôi không sử dụng mặc định đi kèm với hệ điều hành x):

thêm vào gem install mysql2cờ của bạn bên dưới

  • --srcdir="..." - bao gồm
  • --with-mysql-dir="..." - thư mục mysql
  • --with-mysql-config="..." - tệp mysql_config

như thế này gem install mysql2 --srcdir=/usr/local/mysql/include/ --with-mysql-dir=/usr/local/mysql --with-mysql-config=/usr/local/mysql/bin/mysql_config


1

Trong Centos 6.x (7 sẽ hoạt động) với SCL (bộ sưu tập phần mềm) rh-mysql:

scl enable rh-mysql56 bash
gem install mysql2 -v '0.4.5' -- --with-mysql-include=/opt/rh/rh-mysql56/root/usr/include --with-mysql-lib=/opt/rh/rh-mysql56/root/usr/lib64

0

Tôi đoán rằng nếu bạn gõ rvm use ruby-2.1.0@rails4.0 --createvào thư mục của bạn thì bundle installnó hoạt động.

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.