Lỗi khi cài đặt mysql2: Không thể tạo tiện ích mở rộng riêng cho gem


485

Tôi gặp một số vấn đề khi cố gắng cài đặt mysql2gem cho Rails. Khi tôi cố gắng cài đặt nó bằng cách chạy bundle installhoặc gem install mysql2nó báo lỗi sau:

Lỗi khi cài đặt mysql2: ERROR: Không thể xây dựng tiện ích mở rộng riêng của gem.

Làm thế nào tôi có thể sửa lỗi này và cài đặt thành công mysql2?


Trong trường hợp của tôi, ruby ​​2.1 không có lỗi nào được hiển thị nhưng nó bị đóng băng trong vài phút. Spacemonkey đã sửa nó.
Lucio

Câu trả lời:


916

Trên Ubuntu / Debian và các bản phân phối khác sử dụng aptitude:

sudo apt-get install libmysql-ruby libmysqlclient-dev

Gói libmysql-rubyđã được loại bỏ và thay thế bởi ruby-mysql. Đây là nơi tôi tìm thấy giải pháp.

Nếu lệnh trên không hoạt động vì libmysql-rubykhông thể tìm thấy, thì những điều sau đây là đủ:

sudo apt-get install libmysqlclient-dev

Trên Red Hat / CentOS và các bản phân phối khác bằng yum:

sudo yum install mysql-devel

Trên Mac OS X với Homebrew :

brew install mysql

5
tôi có cùng một vấn đề trên windows 7..nhiều ý tưởng? lệnh trên không làm việc cho tôi ..
femi

37
Xin chào, tôi đang sử dụng Ubuntu 12.04 với Ruby 1.9.3 và Rails 3.2.8 và trong trường hợp của tôi, cài đặt libmysqlclient-devlà đủ.
SMMousavi

2
Nếu bạn đang sử dụng Mac OSX: cập nhật lên phiên bản XCode mới nhất và cài đặt Công cụ phát triển. Tôi gặp vấn đề cài đặt mysql tương tự (ngay cả khi sử dụng --with-mysql-config = / usr / local / mysql / bin / mysql_config)
Americo Savinon

2
Không cần libmysql-ruby vì tôi đã cài đặt Ruby qua RVM
Michael Lang

1
Đối với các cửa sổ, hãy thử câu trả lời Ticky từ stackoverflow.com/questions/19014117/
nitigyan

60

Tôi đang dùng mac và sử dụng homebrew để cài đặt các chương trình nguồn mở. Tôi đã phải cài đặt các công cụ mac Dev để cài đặt homebrew, nhưng sau đó thì đơn giản:

brew install mysql

để cài đặt mysql. Tôi đã không có một vấn đề đá quý mysql kể từ đó.


3
Tôi đang gặp lỗi ngay cả sau khi làm điều này. Tôi có nên vượt qua một số tùy chọn khi tôi làm gem i mysql2 không ??
hnprashanth

Sau khi chạy nó, tôi không gặp vấn đề gì khi cài đặt đá quý ruby ​​mysql2 trên Mac OSX Lion.
KrisG

3
Nếu điều này không có ích, hãy thử brew link mysql --force.
Chuck Batson

34

Đây là một giải pháp cho người dùng windows , hy vọng nó sẽ giúp!

Sử dụng MySQL với Rails 3 trên Windows

  • Cài đặt railsinstaller -> www.railsinstaller.org (Tôi đã cài đặt nó vào c: \ Rails)

  • Cài đặt MySQL (Tôi đã sử dụng MySQL 5.5) -> dev.mysql.com/doads/installer/

--- để cài đặt myQuery ---

Nếu bạn chưa cài đặt hai tệp này, bạn có thể cần chúng để chạy MySQL của bạn

vcredist_x86.exe -> http://www.microsoft.com/doad/en/details.aspx? id = 5555 dotNetFx40_Full_x86_x64.exe -> http://www.microsoft.com/doad/en/details.aspx?id=17718

Sử dụng cài đặt mặc định Máy phát triển

-MySQL Server Config-
port: 3306
windows tên dịch vụ: MySQL55
mysql root pass: root (bạn có thể thay đổi điều này sau)
(tên người dùng: root)
-MyQuery Server Config-

--- để cài đặt myQuery ---


--- Cài đặt đá quý mysql2 ---

Quan trọng: Thực hiện việc này với Dòng lệnh Git Bash (cài đặt này với railsinstaller) ->

đá quý start / Git Bash cài đặt mysql2 - '--with-mysql-lib = "c: \ Tệp chương trình \ MySQL \ MySQL Server 5.5 \ lib "--with-mysql-include =" c: \ Program Files \ MySQL \ MySQL Server 5.5 \ include "'

Bây giờ, gem nên đã cài đặt chính xác

Sao chép tệp libmysql.dll từ
C: \ Tệp chương trình \ MySQL \ MySQL Server 5.5 \ lib
thành
C: \ Rails \ Ruby1.9.2 \ bin --- Cài đặt mys mys2

Gem ---


Bây giờ bạn sẽ có thể sử dụng ứng dụng Rails của mình với MySQL, nếu bạn không chắc chắn cách tạo ứng dụng Rails 3 bằng MySQL đọc trên ...


--- Tải ứng dụng Rails 3 đi với MySQL ---

Mở dấu nhắc lệnh (không phải Git Bash) -> start / cmd
Điều hướng đến thư mục của bạn (c: \ Trang web)
Tạo ứng dụng đường ray mới

rails new world

Xóa tệp c: \ Pages \ world \ public \ index.html
Chỉnh sửa tệp c: \ Sites \ world \ config \ Rout.rb
thêm dòng này -> root: to => 'city # index'

Mở dấu nhắc lệnh (tạo khung nhìn và bộ điều khiển)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer



Chỉnh sửa tệp c: \ Pages \ world \ app \ model \ city.rb để trông như thế này

class City < ActiveRecord::Base
 set_table_name "city"
end

Chỉnh sửa tệp c: \ Pages \ world \ config \ database.yml để trông như thế này

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

thêm vào gemfile

gem 'mysql2'

Mở lệnh nhắc cửa sổ cmd, không phải Git Bash (chạy ứng dụng của bạn!)
Điều hướng đến thư mục ứng dụng của bạn (c: \ Pages \ world)

rails s

Mở trình duyệt của bạn tại đây -> http: // localhost: 3000

--- Tải ứng dụng Rails 3 đi với MySQL ---


Cảm ơn, vấn đề là tôi đã sử dụng góa PowerShell chứ không phải dấu nhắc lệnh bình thường. bây giờ nó đang hoạt động :)
Danpe

máy chủ lưu trữ phải là 127.0.0.1 và nếu mật khẩu là số, nó phải được đặt trong trích dẫn ex '123456' nếu không chúng ta có thể gõ bình thường ex admin123
duykhoa

3
Sử dụng XAMPP:gem install mysql2 -- --with-mysql-dir=C:\xampp\mysql
Mifeng

Nhìn vào đường dẫn --with-mysql-include: gem install mysql2 - --pl platform = ruby ​​--with-mysql-lib = "d: \ mariadb \ lib" --with-mysql-include = "d: \ mariadb \ bao gồm \ mysql "
Ivan

@Mifeng đã làm việc rất tốt cho tôi nhưng tôi đang sử dụng GitBash và cần -- --with-mysql-dir="C:\xampp\mysql"mà không có dấu ngoặc kép `` của tôi đã bị tước. Cảm ơn bạn
Mutmatt

20

Tôi có một số máy tính, bộ xử lý 32 và 64 bit, chúng chạy trên phiên bản Ubuntu Linux, Maverick (10.10).

Tôi đã có cùng một vấn đề, và đối với tôi, sudo apt-get install libmysql-ruby libmysqlclient-dev công việc đã làm !!!


19

Đối với MacOS Mojave :

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


cũng như cho MacOS Catalina
Vlad

17

Một cách khác cho người dùng MacOS

Nếu bạn đã sử dụng "brew" để cài đặt mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

xxx = phiên bản của đá quý mysql2 mà bạn muốn cài đặt
yyy = phiên bản của mysql bạn đã cài đặt ls /usr/local/Cellar/mysqlđể tìm thấy nó.


Đã thử ~ 10 câu trả lời từ tất cả các loại câu hỏi được hỏi ở đây ... Bạn đã giải quyết nó. Cảm ơn :)
Stan

7

Bạn đã thử sử dụng chưa

 gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib 

để xác định vị trí của thư mục cơ sở cũng như đường dẫn đến các thư viện MySQL cần thiết để hoàn tất cài đặt đá quý?

Nguồn: MySQL Gem Cài đặt ERROR: Không thể xây dựng tiện ích mở rộng riêng của gem Diễn đàn MySQL :: Ruby :: Trợ giúp cần thiết khi cài đặt liên kết MySQL cho Ruby


Làm việc tuyệt vời. Tôi đã phải sử dụng một đường dẫn khác, mà tôi đã tìm thấy bằng cách gọi which mysqlvà sau đó tìm libthư mục từ đó.
Joshua Pinter

7

Nếu bạn đang sử dụng yum hãy thử:

sudo yum install mysql-devel

Nó hoạt động với tôi trong Amazon EC2 Micro Instance, dựa trên CentOS.
Lennon

5

Điều này đã giải quyết vấn đề của tôi một lần trong Windows:

subst X: "C:\Program files\MySQL\MySQL Server 5.5" 
gem install mysql2 -v 0.x.x --platform=ruby -- --with-mysql-dir=X: --with-mysql-lib=X:\lib\opt 
subst X: /D

Tôi đã định đăng nguồn nhưng tôi thấy người dùng Ritesh Kumar đã làm như vậy. Vì vậy, công đức của anh ấy, không phải của tôi.
Carlos Pardilla

Nếu lib của bạn không có thư mục opt:gem install mysql2 --platform=ruby -- --with-mysql-dir=X: --without-opt-dir
Junior Mayhé 21/03 '

5

Nếu bạn vẫn gặp sự cố.

Hãy thử cài đặt

   sudo apt-get install ruby1.9.1-dev

4

Tôi gặp vấn đề này trên Windows 7. Đây rõ ràng là một vấn đề không tương thích và giải pháp như sau:

Tải xuống libmySQL.dlltệp từ trình cài đặt InstantRails cũ hơn. Nó có sẵn từ repo InstantRails GitHub .

Tiếp theo, sao chép tệp đó vào thư mục Ruby / bin của bạn.

Bây giờ, bạn tốt để đi;)


1
Hrm. :( Tôi đã thử điều này nhưng vẫn gặp lỗi khi cố chạy bundle install.
aakoch

3

Tôi cũng gặp lỗi này. Giải quyết bằng cách cài đặt các gói phát triển. Tôi đang sử dụng vòm và đó là:

sudo pacman -S base-devel

đã cài đặt:

m4, autoconf, automake, bison, fakeroot, flex, libmpc, ppl, cloog-ppl, elfutils, gcc,
libtool, make, patch, pkg-config

nhưng tôi nghĩ rằng nó thực sự cần làm và gcc. Lỗi đầu ra cho biết (trên máy của tôi, trong số khác):

"Bạn phải cài đặt các công cụ phát triển trước."

Vì vậy, đó là một quyết định rõ ràng và nó đã giúp.


3

Bạn phải cài đặt một số phụ thuộc

sudo apt-get install libmysql-ruby libmysqlclient-dev

3

Trên Debian Kéo dài gói làm việc cho tôi là default-libmysqlclient-dev

sudo apt-get update && apt-get install -y default-libmysqlclient-dev


3

Trong trường hợp của tôi, điều này đã giúp:

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

Sau đó:

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

Kết quả:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

Xem bài đăng này (CẢNH BÁO: tiếng Nhật bên trong).


3

Trên Ubuntu (18.04)

tôi đã có thể giải quyết vấn đề này bằng cách chạy như sau:

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

tài liệu tham khảo


2

Tôi đã gặp phải lỗi này trên máy mac của mình và thấy rằng tôi cần nâng cấp từ mysql 32 bit lên mysql 64 bit để lỗi này biến mất. Tôi đang chạy OSX 10.6 trên macbook pro intel với ruby ​​1.9.2 và rails3.0.0

Tôi cũng cần phải cài đặt xcode để có được các tiện ích unix như "make" được yêu cầu để biên dịch gem.

Một khi điều này được thực hiện, tôi có thể chạy gem cài đặt mysql và gem cài đặt mysql2 mà không gặp lỗi.


1

Đối với người dùng windows: Chẳng hạn, bạn đặt lib và bao gồm đường dẫn của mysql, nếu bạn đang sử dụng xampp, bạn có thể có như thế này:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'

1

Giải pháp chỉ hoạt động trên Mac OS X

Nếu bạn đã cài đặt MySQL với homebrew, điều làm việc cho tôi là gỡ cài đặt MySQL và cài đặt MySQL Community Edition thông qua trang web MySQL ( https://www.mysql.com/ ).

Sau khi cài đặt, chỉ cần nhập lại lệnh đến gem install mysql2hoặc nếu cần sudo gem install mysql2, nếu bạn đang nhận được sự cố từ chối quyền.


0

Tôi đã nhận được đá quý được xây dựng trên Mac OS X 10.6.6 bởi 1) Đảm bảo gói công cụ dành cho nhà phát triển được cài đặt 2) Tải xuống gói MySQL hiện tại (5.5.8 trong trường hợp của tôi) từ Nguồn 3) Cài đặt công cụ cmake từ cmake.org 4 ) Thực hiện theo các hướng dẫn trong phần 2.11 của INSTALL-SOURCE từ các tệp phân phối mysql 5) sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include Viên ngọc được xây dựng thành công, nhưng có hai lỗi trong tài liệu mà ndoc và ri phàn nàn. Nhưng bây giờ khi tôi cố gắng yêu cầu 'mysql2', tôi nhận được một

LoadError: no such file to load -- mysql2/mysql2

Tôi đã hy vọng lỗi tôi sẽ nhận được là libmysqlclient.16.dylib không thể được tìm thấy bởi vì chúng tôi đã tìm ra điều đó trong một bài đăng khác (tìm kiếm install_name_tool).

$ PATH của tôi có / usr / local / mysql trong đó (đó là nơi chứa các tệp nguồn và tệp được xây dựng của tôi), vì vậy tôi hơi bối rối. Nếu bất cứ ai có bất kỳ suy nghĩ, tôi sẽ kiểm tra lại sau một vài giờ ngủ.



0

Sau khi bạn khắc phục các sự cố mysql-dev, bạn có thể cần phải xóa cài đặt mysql2 xấu. Xem xét kỹ các thông báo sau khi cài đặt $ bundle. Bạn có thể cần phải

rm -rf vendor/cache/
rm -rf ./Zentest

Điều này sẽ xóa cài đặt mysql2 xấu để cài đặt gói $ cuối cùng có thể tạo ra cài đặt tốt.



0

Có "Bạn phải cài đặt các công cụ phát triển trước." lỗi khi cố gắng cài đặt đá quý mysql2 sau khi nâng cấp lên Mac OS X Mountain Lion . Rõ ràng thực hiện nâng cấp này loại bỏ các trình biên dịch dòng lệnh.

Sửa chữa:

  • Tôi đã gỡ cài đặt phiên bản Xcode rất cũ của mình (chạy tập lệnh gỡ cài đặt trong / Nhà phát triển / Thư viện). Sau đó xóa thư mục / Developer.
  • Đã đi đến AppStore và tải xuống Xcode.
  • Đã khởi chạy Xcode và đi vào Tùy chọn -> Tải xuống và cài đặt các công cụ dòng lệnh.

0

Bạn đang gặp vấn đề này vì bạn chưa cài đặt MySql. Trước khi cài đặt đá quý mysql2. Cài đặt MySQL. Sau đó, mysql2 gem sẽ cài đặt.


0

Tôi chỉ muốn thêm câu trả lời này cụ thể cho Người dùng Mac .

Máy chủ của tôi đã chạy hoàn toàn tốt cho đến khi tôi cập nhật xcode của mình. Trong khi khởi động máy chủ rails của tôi, lỗi được hiển thị như thế này

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb --with-mysql-
    checking for rb_thread_blocking_region()... /Users/user/.rvm/rubies/ruby-1.9.3-  
    p448/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an    
    executable file. (RuntimeError)

Và đã có đề xuất cài đặt đá quý mysql2 vào cuối thông báo lỗi. Vì vậy, khi tôi cố gắng cài đặt nó, tôi đã gặp lỗi như đã đề cập trong câu hỏi này. Lỗi tôi nhận được như sau

ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.

Vì vậy, như được đề xuất trong bài đăng này, tôi đã thử 'brew install mysql' và điều đó đã bỏ qua nói rằng phiên bản mysql đã được cài đặt như vậy. Nhưng đã có cảnh báo trước khi nó nói

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license

Sau đó, tôi đã thử điều này sudo xcodebuild -licensevà gõ "đồng ý" ở cuối. Bạn phải root để đồng ý với giấy phép.

Sau này, tôi lại thử cài đặt gói và mọi thứ vẫn hoạt động tốt như bình thường. [Ngay cả do cập nhật xcode này, tôi cũng gặp vấn đề với tháp của mình.]


0

libmysql-ruby đã được loại bỏ và thay thế. Lệnh mới:

 sudo apt-get install ruby-mysql libmysqlclient-dev
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.