Thư viện không được tải: lỗi libmysqlclient.16.dylib khi cố chạy 'rails server' trên OS X 10.6 với mysql2 gem


206

Tôi đã vật lộn với điều này một thời gian.

Tôi đã cài đặt Rails 3, gem, mysql trên máy Snow Leopard của mình. Tất cả đều diễn ra tốt đẹp cho đến khi tôi tạo dự án đầu tiên của mình và cố gắng chạy

rails server

Khi chạy cái này tôi nhận được:

jontybrook$ rails server
/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.16.dylib (LoadError)
  Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
  Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
    from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:64:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:62:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `each'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler/runtime.rb:51:in `require'
    from /Library/Ruby/Gems/1.8/gems/bundler-1.0.7/lib/bundler.rb:112:in `require'
    from /Users/jontybrook/Dropbox/CODING/simple_cms/config/application.rb:7
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28:in `require'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:28
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27:in `tap'
    from /Library/Ruby/Gems/1.8/gems/railties-3.0.3/lib/rails/commands.rb:27
    from script/rails:6:in `require'
    from script/rails:6
jontybrook$ 

Theo như tôi có thể nói vấn đề là với đá quý mysql2. MySQL dường như đang chạy tốt và tham chiếu Gemfile của tôi mysql2, tệp cơ sở dữ liệu của tôi cũng có vẻ ổn.

Các lỗi đề cập

Reason: image not found - /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Chưa hết

jontybrook$ cd /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2
jontybrook$ ls
client.rb   em.rb       error.rb      mysql2.bundle result.rb

MySQL2.bundle đang ở đó!?

Nếu tôi sử dụng đá quý mysql cũ, WEBrick khởi động tốt. Nhưng đó không phải là lý tưởng, phải không?

Tôi đã thử mọi thứ google có thể cho tôi! Bất kỳ trợ giúp nhiều đánh giá cao.

Câu trả lời:


393

Tôi không bao giờ có thể có được bất kỳ câu trả lời nào trong số này để làm việc cho tôi, nhưng đây là lệnh mà tôi đã sử dụng để làm cho nó hoạt động với tôi. Bằng cách này, bạn không cần phải sử dụng install_name_tool mỗi khi bạn cập nhật mysql của mình

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

11
Đó là cách đơn giản nhất và đúng đắn để giải quyết vấn đề đó.
Voldy

2
cảm ơn vì điều đó. câu trả lời được đánh dấu ở trên chỉ hoạt động cho một trang web, nhưng điều này hoạt động vĩnh viễn. Cá betta của nó.
fregas

12
Đối với những người tò mò chuyện gì đang xảy ra, lệnh này tạo một liên kết tượng trưng từ vị trí thứ hai đến vị trí thứ nhất. Khi đá quý tìm kiếm thư viện máy khách MySQL bên dưới /usr/lib, liên kết đó sẽ phân giải đến vị trí thực sự được cài đặt. Trên OS X, thường ở dưới /usr/local/mysql/lib, đó là nơi lệnh này liên kết đến. Nếu lib của bạn được cài đặt ở một vị trí khác, bạn sẽ cần phải điều chỉnh lệnh này. Nhập locate libmysqlclient.18.dylibvà thay thế kết quả cho đối số đầu tiên sau -s.
Siobhán

1
@Sean D., khi tôi chạy định vị libmysqlclient.18.dylib Tôi nhận được kết quả WARNING: The locate database (/var/db/locate.database) does not exist. To create the database, run the following command: sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist Please be aware that the database can take some time to generate; once the database has been created, this message will no longer appear.này là gì?
GiH

1
@GiH Bạn chỉ cần chạy lệnh nó sẽ cho bạn biết ( sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist). Điều đó sẽ bắt đầu quá trình lập chỉ mục ổ cứng của bạn, điều này sẽ khiến locatelệnh hoạt động trong tương lai. Tuy nhiên, trong hầu hết các trường hợp, tôi nghĩ bạn sẽ không cần phải làm điều đó và chỉ có thể sử dụng lệnh mà luvlss cung cấp như hiện trạng.
Siobhán

93

Tôi đã giải quyết điều này, cuối cùng!

Tôi đã cài đặt lại Ruby và Rails trong RVM. Tôi đang sử dụng phiên bản Ruby 1.9.2-p136.

Sau khi cài đặt lại dưới rvm, lỗi này vẫn còn.

Cuối cùng, lệnh ma thuật đã giải quyết nó là:

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql/lib/libmysqlclient.16.dylib ~/.rvm/gems/ruby-1.9.2-p136/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Hy vọng điều này sẽ giúp người khác!


1
Điều này bằng cách nào đó đã thiết lập lại các đặc quyền của mysql và bây giờ tôi không thể đăng nhập ... ngay cả sau khi thực hiện đặt lại mật khẩu bằng một tệp như được mô tả trong tài liệu mysql.
Coderama

2
Cảm ơn, điều này đã làm điều đó cho tôi. Và đối với những người khác có cùng vấn đề, nếu bạn sử dụng rvm thì bỏ qua sudo, nếu không các quyền có thể sẽ thay đổi.
DanneManne

2
Lệnh ma thuật hoạt động ngay cả khi bạn không sử dụng RVM - chỉ cần thay đổi đối số cuối cùng để chỉ đến mysql2-0.2.6/lib/mysql2/mysql2.bundlebất cứ nơi nào đá quý của bạn được cài đặt.
Tobias Cohen

2
Cảm ơn bạn rất nhiều. Làm thế nào trên trái đất bạn đã tìm ra điều này?
Derek

7
Cảm ơn bạn! Tôi cần một lệnh hơi khác cho Mac OS X Lion của tôi chạy RVM 1.6.4 với Ruby 1.9.2-p180, mysql2 gem 0.3.10: sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/rvm/gems/ruby-1.9.2-p180/gems/mysql2-0.3.10/lib/mysql2/mysql2.bundle
Randy Eppinger

88

Bản sửa lỗi này hoạt động rất tốt đối với tôi:

Thêm phần sau vào ~ / .profile của bạn

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

http://www.rickwargo.com/2010/12/16/installing-mysql-5-5-on-os-x-10-6-snow-leopard-and-rails-3/


1
Cảm ơn rât nhiều. Điều này làm việc cho tôi. (Mac os x 10.6.6i, ruby ​​1.9.3p327), sử dụng RVM.
datnt

Đã xác nhận. Đó là tất cả những gì tôi phải thêm vào osx Maverick 10.9.1
Artur79

40

Đối với tôi, điều này chỉ là do tôi đã nâng cấp mysql nhưng chưa cập nhật đá quý mysql2 - việc cài đặt lại đá quý sẽ khắc phục nó ...

gem pristine mysql2


Đây phải là câu trả lời được lựa chọn.
El Guapo

26

Tôi có cùng một vấn đề. Có vẻ như không thể tìm thấy thư viện libmysqlclient. Một sửa chữa tạm thời đã làm việc cho tôi là như sau:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib/

Tôi không chắc chắn nơi cấu hình chỉ định đường dẫn tải hoặc cài đặt ở đâu nhưng cài đặt mysql của tôi không xuất hiện trong đó. Tôi sẽ đăng lại nếu tôi tìm thấy một giải pháp lâu dài hơn.

Chỉnh sửa: Trên thực tế sửa chữa này xuất hiện để giải quyết vấn đề chính xác hơn.


24

Thêm vào dưới đây của bạn ~/.bash_profile:

export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

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


Đúng, hoạt động trên 1.9.3-p448. Thật xấu hổ vì đó không phải là một câu trả lời được chấp nhận.
andreimarinescu

17

Trong bản cập nhật OSX El Capitan khi bạn làm điều này:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

nó ném một lỗi như

ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Vì vậy, để tránh điều này, điều đầu tiên bạn có thể làm là xác định vị trí libmysqlclient.18.dylibbằng cách sử dụng lệnh

User$ locate libmysqlclient.18.dylib

Trong trường hợp của tôi, nó đã trở lại /usr/local/mysql-5.5.24-osx10.5-x86_64/lib/libmysqlclient.18.dylib

Vì vậy, thay vì usr/lib/chúng tôi sẽ tạo symlink để usr/local/lib/thích điều này:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Thêm chi tiết: https://forums.developer.apple.com/thread/7935


1
Trên El Capitan đối với tôi, tất cả những gì bạn cần là dòng cuối cùng:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
Justin

Vui vì nó đã giúp ai đó. : D
Sony Mathew

Đây là câu trả lời ĐÚNG cho elcapitan, liên kết mục tiêu của bạn sẽ nằm trong /usr/local/libthư mục
Arnold Roa

13

dòng sau làm việc cho tôi. Tôi đang sử dụng mac 10.7.2.

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib


1
Đây là những gì đã khắc phục vấn đề của tôi. Cảm ơn!
Justin Bozonier

11

Chỉ cần gặp vấn đề này. Tất cả những gì tôi phải làm là gỡ cài đặt đá quý mysql2 và cài đặt lại nó. Hy vọng điều này sẽ làm việc cho những người khác


1
Trên máy của tôi, đang chạy Mavericks, tôi đã gỡ bỏ tất cả phiên bản của đá quý mysql2 bằng cách gỡ cài đặt đá quý mysql2 và trả lời All versionstại dấu nhắc. Sau đó tôi đã chạy nâng cấp bia mysql và sau đó cài đặt đá quý mysql2.
Martin Strerich

4

Đây là cách nó làm việc cho tôi:

Tôi đã chạy lệnh dưới đây
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib ~ / .rvm / Gem / ruby-1.9.2-p180 / Gem / mys2 /lib/mysql2/mysql2.bundle

Môi trường của tôi:
$ rails -v Rails 3.0.6

$ mysql - chuyển đổi
mysql Ver 14,14 Phân phối 5.5.11, cho osx10.6 (i386) bằng cách sử dụng readline 5.1

$ ruby ​​-v
ruby 1.9.2p180 (2011 / 02-18 sửa đổi 30909) [x86_64-darwin10.7.0]

Hy vọng điều này sẽ giúp được ai đó.


3

Cảm ơn, Ogapo! Xuất khẩu bí danh đó đã làm việc cho tôi, và sau đó tôi đã theo liên kết, và trong trường hợp của tôi, mysql2.bundle đã xuất hiện trong / L Library / Revy / Salad / 8 /ems / mysql2-0.2.6 / lib / mysql2 / mysql2.bundle Tôi đã điều chỉnh install_name_tool để sửa đổi gói đó thay vì một trong ~ / .rvm và làm cho nó hoạt động theo cách nó nên được thực hiện.

Vậy bây giờ:

   $ otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle 
    /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
        /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
        /usr/local/mysql/lib/libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

3

xin chào nó đã làm việc cho tôi từ liên kết được đề xuất từ Fredy Andersen

sudo install_name_tool -change libmysqlclient.16.dylib /usr/local/mysql /lib/libmysqlclient.16.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

chỉ cần thay đổi phiên bản mysql của tôi, trong lệnh, cảm ơn


3

Tôi đã giải quyết vấn đề này bằng cách xóa gemet của tôi cho dự án hiện tại của tôi và tạo lại nó và cài đặt lại gói. Tôi nghĩ rằng tôi đã gây ra nó bằng cách cài đặt một phiên bản mới hơn của mysql.


3

Tôi gặp vấn đề này khi làm việc với Django, tôi sử dụng brewđể cài đặt rất nhiều chương trình Nguồn mở của mình và tôi cần phải làm như sau vì tôi đã từng brewcài đặt mysql:

sudo ln -s /usr/local/Cellar/mysql/5.5.20/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Hãy chắc chắn để thay thế bằng phiên bản của các thư viện!


3

bundle install mysql --forceđã giúp tôi Nó đã cài đặt lại các phụ thuộc mà kho đi theo kết quả của brew uninstall mysql.


Unknown switches '--force'
Arnold Roa

2

Jonty, tôi cũng đang vật lộn với điều này.

Tôi nghĩ rằng có một manh mối ở đây:

otool -L /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle:
    /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/libruby.1.dylib (compatibility version 1.8.0, current version 1.8.7)
    libmysqlclient.16.dylib (compatibility version 16.0.0, current version 16.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)

Lưu ý đường dẫn đến dylib là, uh, khá ngắn?

Tôi đang cố gắng tìm ra nơi mà các hướng dẫn cài đặt đá quý rời khỏi đường dẫn dylib, nhưng nó sẽ chậm vì tôi chưa bao giờ tự chế tạo đá quý.

Tôi sẽ đăng thêm nếu tôi tìm thấy nhiều hơn!


2

Tôi đã có vấn đề chính xác như vậy một vài ngày trước. Cuối cùng tôi đã giải quyết nó. Tôi không chắc lắm, nhưng tôi sẽ nói cho bạn biết tôi đã làm gì. Có lẽ nó sẽ giúp bạn.

Tôi bắt đầu bằng cách tải RVM. Nếu bạn chưa sử dụng nó, tôi khuyên bạn nên làm như vậy. Về cơ bản, nó tạo ra một hộp cát để cài đặt riêng Ruby, RoR và RubyGems. Trong thực tế, bạn có thể có nhiều cài đặt đồng thời và ngay lập tức chuyển sang một cài đặt khác. Nó hoạt động như một say mê.

Tại sao điều này hữu ích? Bởi vì bạn không nên lộn xộn với cài đặt Ruby mặc định trong OS X. Hệ thống phụ thuộc vào nó. Tốt nhất là chỉ để cài đặt Ruby và RoR mặc định và tạo một cái mới bằng RVM mà bạn có thể sử dụng cho sự phát triển của riêng mình.

Khi tôi tạo bản cài đặt Ruby riêng, tôi chỉ cần cài đặt RoR, RubyGems và mysql và nó đã hoạt động. Để biết các bước chính xác tôi đã thực hiện, hãy xem câu hỏi của tôi: Cài đặt Rails, MySQL, v.v.

Một lần nữa: Tôi không biết chắc chắn điều này sẽ giải quyết vấn đề của bạn. Nhưng nó chắc chắn đã giúp tôi rất nhiều, và trong mọi trường hợp sử dụng RVM rất được khuyến khích.


2

Tôi vẫn thấy rằng với các giải pháp ở trên, nó không hoạt động (ví dụ) với plugin Rails cho TextMate. Tôi đã gặp một lỗi tương tự (khi lấy lược đồ cơ sở dữ liệu).

Vì vậy, những gì đã làm là, thiết bị đầu cuối mở:

cd /usr/local/lib
sudo ln -s ../mysql-5.5.8-osx10.6-x86_64/lib/libmysqlclient.16.dylib .

Thay thế mysql-5.5.8-osx10.6-x86_64 bằng đường dẫn của riêng bạn (hoặc mysql).

Điều này tạo ra một liên kết biểu tượng đến lib, bây giờ đường ray chạy từ dòng lệnh, cũng như (các) plugin TextMate như ruby-on-rails-tmbundle .

Để rõ ràng: điều này cũng sửa lỗi bạn gặp phải khi khởi động máy chủ rails.


2

Điều này thường xảy ra khi bạn nâng cấp mysql. Đá quý mysql2 được cài đặt được xây dựng trên các lib mys mys cũ không thể hoạt động với các lib mới. Chỉ cần cài đặt lại nó.

Gỡ cài đặt mysql2 với gem uninstall mysql2. Sau đó cài đặt nó vớigem install mysql2


1

Tôi đã giải quyết nó bằng cách tạo tệp .rvmrc trong thư mục dự án của tôi.

rvm use <yourrubie>

sau đó đi vào con đường dự án của tôi

cd ~/myprojectpath

sau đó tôi chạy

bundle install

1

Phiên bản lệnh của luvlss của tôi:

Mac OSX 10.10.5

MySQL 5.6.27

Hành khách 5.0,21

sudo ln -s /usr/local/mysql-5.6.27-osx10.8-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Nếu bạn đang thử nhiều liên kết khác nhau, như tôi đã làm, hãy dọn dẹp với:

sudo unlink /usr/lib/libmysqlclient.18.dylib


1

Mở Terminal và chạy như sau:

export PATH=$PATH:/usr/local/mysql/bin

Nó nên hoạt động.


1
Điều này đã làm công việc, cảm ơn bạn !!! Tôi gặp sự cố khi Django chạy trên Visual Studio Code. Tiếp tục nhận được lỗi cho dù tôi đã cài đặt mysqlclient trên virtualenv.
Irshu

0

Nếu bạn đang sử dụng OSX và cài đặt mysql bằng brew, bạn có thể:

brew link mysql

Nếu bạn gặp sự cố với phiên bản (Tôi đã chạy mysql 5.7 trong khi đá quý của tôi yêu cầu 5.6.25), bạn có thể

brew unlink mysql
brew switch mysql 5.6.25

0

Đối với tôi, tôi phải gỡ bỏ thủ công mysql

brew uninstall mysql
rm -rf /usr/local/var/mysql
brew install mysql
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.