2010-09-20 39 views
60

Tôi cố gắng để cài đặt mysql2 đá quý thông qua Bundler, nhưng nó vẫn không ngừng hấp hối với các lỗi sau:lỗi Cài đặt đá quý mysql2 qua Bundler

** executing command 
/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/rubygems/installer.rb:483:in 'rescue in block in build_extensions': 
ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) 

/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby extconf.rb --with-mysql-config=/usr/bin/mysql_config 
checking for rb_thread_blocking_region()... yes 
checking for mysql.h... no 
checking for mysql/mysql.h... no 

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

*** 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=/home/cc_rails/.rvm/rubies/ruby-1.9.2-p0/bin/ruby 
--with-mysql-config 
Gem files will remain installed for inspection. 

Hầu hết những điều tôi tìm thấy qua Googling đề nghị đi qua các --with-mysql-config tham số để sửa nó. Vì vậy, dựa trên:

$ which mysql_config 
/usr/bin/mysql_config 

Tôi được thêm vào sau để cấu hình của Bundler:

$ bundle config build.mysql2 --with-mysql-config='/usr/bin/mysql_config' 

Tuy nhiên, vẫn không có may mắn - cùng vụ tai nạn như trên.

Vì nó chết với lỗi mysql.h is missing, tôi đã kiểm tra điều đó và bị cáo buộc là không thể tìm thấy bởi Bundler.

$ find/-name mysql.h 
/usr/include/mysql5/mysql/mysql.h 

Bạn nghĩ gì?

+2

Bạn đã thử giải pháp tại http://stackoverflow.com/questions/3608287/installing-mysql2-gem-for-rails-3 chưa? – Wrikken

+0

Nếu không, bạn có thể chỉ cần chỉnh sửa 'ext/mysql2/extconf.rb' và nhập đúng đường dẫn tới thư mục mysql của bạn (nó ở gần đầu). – Wrikken

Trả lời

95

Trả lời tương tự như bài đăng được Wrikken đăng - đây là những gì tôi đã làm để khắc phục sự cố cho người đọc trong tương lai.

(Điều này là dành cho RHEL 5.5 - lệnh tương tự nhưng khác nhau áp dụng cho Ubuntu/Debian/etc.)

Làm sudo yum list installed sẽ in ra tất cả các gói cài đặt trên máy tính của bạn (lưu ý: yum trên RHEL đòi hỏi bạn thêm một kho lưu trữ Mạng lưới Red Hat [Tôi sử dụng EPEL] và chạy nó qua sudo).

Tôi đã có mysqlmysql-server, giải thích lý do tại sao MySQL hoạt động tốt cho mọi ứng dụng đã tồn tại trước đó, nhưng không cần mysql-devel, cần sửa lỗi mysql.h is missing và các lỗi xây dựng tương tự khác.

câu chuyện dài ngắn, sau một mysqldump -u root -ppassword --all-databases > full-dump.sql cho an toàn, nó đã được cố định với một đơn giản

sudo yum install mysql-devel 
+0

Hoạt động tuyệt vời! Cảm ơn rất nhiều! –

+9

Trong mac, làm 'brew install mysql' http: // stackoverflow.com/questions/3608287/installation-mysql2-gem-for-rails-3 –

+0

Khi cài đặt, 'mysql-devel' được cài đặt, nhưng'/usr/include/mysql' trống. 'mysql.h' được đặt trong'/usr/include/mysql51'. Vì vậy, tôi chạy 'sudo rmdir/usr/include/mysql; sudo ln -s/usr/include/mysql51/usr/include/mysql' và thì đấy! Mysql2 bây giờ xây dựng đúng cách. – Zee

33

Đối với Ubuntu phải cài đặt sau. libmysqlclient-dev libmysqlclient16

+0

Hoàn hảo. Đã làm cho tôi. – Zabba

+0

+1 Cảm ơn, bạn đã lưu ngày của tôi :-) –

+0

Khi tôi thử điều này trên Ubuntu 16.04, không có 'libmysqlclient16', chỉ' libmysqlclient20'. Tôi nghi ngờ rằng bất kỳ phiên bản nào của Ubuntu bạn sử dụng, giống như 'sudo apt-get install 'libmysqlclient *'' sẽ cài đặt cả hai gói cần thiết, miễn là phiên bản cập nhật không phá vỡ bất cứ thứ gì. – mwfearnley

0

Tôi biết đây là cổ đại, nhưng nếu có ai vẫn bị lỗi zlib này, hãy chắc chắn rằng bạn đã gõ: RVM sử dụng

(bất kỳ phiên bản bạn đang sử dụng)

Tôi có thể thề rằng tôi đã làm điều đó. Chỉ cần đăng trong trường hợp bất cứ ai đang kéo tóc của họ ra và điều này sẽ giúp. Nếu không may mắn. :)

8

Sự cố trên sẽ xảy ra vì gói mysql-devel không được cài đặt đúng cách trong hệ thống của bạn. Tôi sẽ giải thích tương tự trong Centos về cách khắc phục nó. Khi bạn cố gắng để cài đặt gói phần mềm đó sử dụng,

yum install mysql-devel 

somtimes sẽ có một số cuộc đụng độ xảy ra với các gói hiện có mà được cài đặt nếu bạn cài đặt công cụ MySql-hành chính và trình duyệt truy vấn MySQL.

Trong trường hợp đó, bạn cần gỡ cài đặt tất cả các gói mysql2 hiện có và cài đặt lại.

rpm -qa -last | grep -i mysql 
    yum remove MySQL-server-5.5.27-1.rhel5 
    yum remove MySQL-client-5.5.27-1.rhel5 
    yum remove mysql-gui-tools-5.0r12-1rhel4 
    yum remove mysql-query-browser-5.0r12-1rhel4-a 

Vì vậy, bạn có thể gỡ cài đặt mọi thứ mysql hiển thị với rpm -qa như trên.

Sau đó, bạn có thể cài đặt máy chủ mysql và máy khách mysql.

yum install mysql-server 
    yum install mysql-client 

Bây giờ bạn thực hiện cài đặt gói mysql-devel.

yum install mysql-devel 

Bây giờ không có xung đột gói và bạn có thể cài đặt đá quý mysql2.

gem install mysql2 -v '0.3.11' 

Bây giờ đá quý mysql2 của bạn sẽ được cài đặt thành công và bạn sẵn sàng sử dụng.

1

Trong trường hợp của tôi, sự cố là tập lệnh mysql_config bị lỗi. Khi gọi bởi các dòng lệnh với các tùy chọn --cflags nó sẽ trả về một chuỗi các lựa chọn bao gồm:

-Xclang -target-feature -Xclang -aes -Qunused-arguments

Đối với một số lý do cuộc gọi đến have_header ('mysql.h') trong kịch bản extconf.rb sẽ thất bại nếu các tùy chọn đó được bao gồm.

gì làm việc cho tôi là tay chỉnh sửa file mysql_config loại bỏ các tham chiếu đến các lựa chọn từ dòng:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -Xclang -target-feature -Xclang -aes -Qunused-arguments -O2 -g -DDBUG_OFF " #note: end space!

mà tôi viết lại như sau:

cflags="-I$pkgincludedir -Os -w -pipe -march=native -O2 -g -DDBUG_OFF " #note: end space!
20

Đối với máy Mac với một brew cài đặt của mysql giải pháp sau khắc phục sự cố cho tôi:

Tôi đã chỉnh sửa tệp mysql_config trong /usr/local/Cellar/mysql/5.6.12/bin và xóa các tùy chọn trình biên dịch W -Wno-nul l-conversion và -Wno-unused-private-field cho cflags và cxxflags.

Điều này giải quyết được vấn đề với "gem install mysql2".

tham khảo: http://www.randomactsofsentience.com/2013/05/gem-install-mysql2-missing-mysqlh-on-os.html

+1

hoạt động cho tôi. cảm ơn! – taiansu

+0

Tôi cũng vậy! Cảm ơn bạn, đã cứu ngày của tôi! –

0

Tôi chạy vào vấn đề này trong khi cài đặt gói cho redmine trên fedora 23. Các giải pháp tôi thấy được để thực hiện lệnh này - sudo dnf install redhat-rpm-config.

Điều này không chỉ khắc phục sự cố của tôi khi cài đặt mysql2 mà còn cho nokogiri và redcarpet.

1

Tôi gặp lỗi tương tự. và cho ubuntu 16. Tôi phải viết lệnh dưới đây:

sudo apt-get install libmysqlclient-dev 

và nó hoạt động trở lại.

Các vấn đề liên quan