rails + MySQL trên OSX: Thư viện không được tải: libmysqlclient.18.dylib


119

Tôi mới bắt đầu với Ruby (và đường ray). Tôi đã thiết lập theo http://ruby.railstutorial.org/ruby-on-rails-tutorial-book#sec:ruby gems, sử dụngrvm . Tôi có mọi thứ hoạt động tốt với sqlite.

Bây giờ tôi muốn thử chuyển đổi mọi thứ sang MySQL, vì đó là những gì tôi thực hiện hầu hết trong quá trình phát triển của mình. Trong Gemfile của tôi, tôi đã thay thế sqlite bằng mysql2:

group :development, :test do
#  gem 'sqlite3', '1.3.5'
  gem 'mysql2'
  gem 'rspec-rails', '2.9.0'
end

Nhưng khi tôi cố gắng tạo DB cho đường ray trong MySQL, tôi nhận được:

$ rake db:create --trace
rake aborted!
dlopen(/Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle
  Reason: image not found - /Users/username/.rvm/gems/ruby-1.9.3-p194@rails3tutorial2ndEd/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundle

Tôi đã thấy các bài đăng khác khuyến nghị cài đặt lại MySQL thông qua homebrew (của tôi đã được cài đặt thông qua một DMG có thể tải xuống), nhưng tôi không muốn làm điều đó vì tôi có một số cơ sở dữ liệu khác trong đó cho các dự án không phải ruby ​​khác.

Trên thực tế, tôi có tệp mà Rails đang tìm kiếm; nó được cài đặt trong /usr/local/mysql/lib/libmysqlclient.18.dylib. Cách tốt nhất để cho Rails biết cách xác định vị trí của nó là gì?


Đây có thể là một bản sao của điều này? stackoverflow.com/questions/4546698/…
gmile

Thật. Tôi không thể xóa câu hỏi của chính mình? Đã bỏ phiếu để đóng là trùng lặp.
George Armhold

Câu trả lời:


313

Giải pháp là khá dễ dàng; Thêm đường dẫn thư viện trong tệp ~ / .bash_profile hoặc ~ / .profile của bạn:

MYSQL=/usr/local/mysql/bin
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

Nếu nó vẫn không hoạt động (điều này làm việc cho tôi):

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

Có rất nhiều blog với install_name_tool, không phù hợp với tôi vì tôi đang sử dụng OSX Lion:

sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/indexer
sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/bin/search

16
Liên kết biểu tượng đã làm việc cho tôi (sau khi nâng cấp lên Mountain Lion). Cảm ơn!
siannopollo

5
Symlink làm được điều đó, đặc biệt đối với các trường hợp như chạy đường ray từ bên dưới RubyMine, nơi .bash_profilekhông thực sự áp dụng.
maksimov 12/113

2
Tôi đã thêm DYLD_LIBRARY_PATH của bạn vào .bash_profile, nhưng tôi cũng phải gỡ cài đặt đá quý 'mysql2' rồi cài đặt lại. như: 'gem gỡ cài đặt mysql2 && gem install mysql2'
brendan

73
Đối với những người đến đây để 10.11 bạn không thể liên kết mềm tới usr/libnữa nhưng một liên kết tượng trưng cho usr/local/libý chí làm việc:sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
JonathanSimmons

2
@JonathanSimmons - Bạn vừa cứu tôi khỏi việc nhổ phần tóc còn lại. Câu trả lời liên kết tượng trưng ban đầu không hoạt động trên OS X 10.11.5, bạn chỉ cần gặp lỗi "ln: /usr/lib/libmysqlclient.18.dylib: Thao tác không được phép" - Mọi thứ hiện đang hoạt động và cuối cùng tôi có thể bắt đầu làm việc trong ngày ... Cảm ơn!
Colin Adams

125

Ở El Capitan, tôi có ln: /usr/lib/libmysqlclient.18.dylib: Operation not permitted

Ở El Capitan /usr/lib/bây giờ có một cờ hạn chế và không thể được ghi vào nếu không tắt bảo mật, vì vậy tôi chỉ cần đặt liên kết vào /usr/local/libthay thế.

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

Máy chủ Rails đang hoạt động tốt trở lại.


2
Không cần tất cả câu trả lời của Alex. Một liên kết tượng trưng đã thực hiện thủ thuật.
gitb

Tôi đã làm điều này và nhận được: "kết nối": Không thể kết nối với máy chủ MySQL cục bộ thông qua socket '/tmp/mysql.sock' (2) (Mysql2 :: Lỗi) "
Josh Hunter

1
@JoshHunter Tôi tin rằng đây là một vấn đề riêng biệt. Có một chủ đề ở đây stackoverflow.com/questions/18449050/… cũng có thể chỉ là máy chủ MySQL không chạy.
TinMonkey

vâng, máy chủ không chạy ... điều này đã khắc phục sự cố. sudo /usr/local/mysql/support-files/mysql.server start
Josh Hunter

62

Trong khi tiêu đề của câu hỏi này mô tả chính xác vấn đề tôi gặp phải, các tình huống khác với những gì được mô tả trong các câu trả lời trước đó và giải pháp cũng vậy.

Trong trường hợp của tôi (El Capitan, mysql được cài đặt qua homebrew), a brew update && brew upgradekhiến gói mysql được nâng cấp lên 5.7.10 (từ 5.6.x).

Bản nâng cấp đã libmysqlclient.18.dylibđược thay thế bằng libmysqlclient.20.dylib, nhưng mysql2viên ngọc vẫn dựa trên cái cũ.

Để khắc phục sự cố, tôi đã làm: gem uninstall mysql2 && gem install mysql2

Xin lưu ý rằng các vấn đề tương tự có thể xảy ra với các thư viện do homebrew quản lý khác nhau ( ví dụ: xem câu trả lời của riêng tôi cho vấn đề này )


Tuyệt quá ! Tôi đã nâng cấp mysql của mình lên 5.7 ... phải đối mặt với vấn đề này ..... đã làm Theo các bước 1. gỡ cài đặt gem mysql2> đã chọn tùy chọn 3 2. gem cài đặt mysql2 3. đã thêm nó vào gemfile của dự án ---> gem 'mysql2' , '~> 0.3.21' 4. bó cài đặt
Udit Kapahi

10
Tôi khuyên mọi người hãy thử cái này đầu tiên! Nếu nó hoạt động, bạn có thể tránh làm hỏng hệ thống của mình với bất kỳ cách giải quyết nào khác. Đôi khi bạn phải dựa vào các liên kết thần kỳ, v.v., nhưng nó làm cho hệ thống của bạn ngày càng trở nên dễ gãy hơn. (Nếu nó không làm việc, không có hại được thực hiện và không có gì để lùi lại.)
Tom Wilson

Làm việc cho tôi quá. Vấn đề là tôi đã chuyển từ cài đặt mysql w / homebrew sang trình cài đặt chính thức.
xenetics vào

1
Đối với bất kỳ người dùng python nào đến đây pip uninstall mysqlclientpip install mysqlclientcũng đã hoạt động.
Peter Dolan

26
sudo ln -s /usr/local/mysql-5.5.25-osx10.6-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Điều đó đã làm việc cho tôi. Tôi đã cài đặt MySQL từ tệp dmg.


Điều này hoạt động trên Mac OS X - Yosemite cho tôi với MySQL được cài đặt từ tệp dmg. Cảm ơn Joseph.
racl101

4
Hoạt động không phép (rõ ràng với sudo) của tôi SO phiên bản là El Capitan
ignacio chiazzo

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

Đã làm cho tôi. Tất cả những cái tương tự đều không.


Đây là giải pháp cho RubyMine.
Justin

13

Tôi gặp phải sự cố này sau khi gỡ bỏ hoàn toàn và sau đó cài đặt mới MySQL. Đặc biệt:

Library not loaded: /usr/local/opt/mysql/lib/libmysqlclient.20.dylib

Tôi thậm chí còn chưa chạm vào ứng dụng Rails của mình.

Cài đặt lại mysql2đá quý đã giải quyết vấn đề này.

$ gem uninstall mysql2
$ gem install mysql2 -v 0.3.18 # (specifying the version found in my Gemfile.lock)

[MySQL 5.7.10, Rails 4.0.0, Ruby 2.0.0, Mac OS X Yosemite 10.10]


9

Nếu bạn đang sử dụng MySQL được cài đặt từ HomeBrew trong El Capitan, thì bạn nên liên kết nó như sau:

sudo ln -sf /usr/local/Cellar/mysql/5.6.27/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

6

Đối với MySql 5.6 được cài đặt từ DMG trên Mavericks

sudo ln -s /usr/local/mysql-5.6.14-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

4

Tôi xác nhận bản vá từ Abhishek không hoạt động.

nó cũng hoạt động cho Yosemite.

lưu ý: thay vì liên kết đến một phiên bản cụ thể của mysql, hãy sử dụng liên kết tượng trưng mysql đã được tạo sẵn:

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

giải pháp này hoạt động cho Xcode và C API.


3

Đối với những người đang sử dụng bia. Chỉ cần liên kết phiên bản mysql của bạn với tùy chọn "--force".

brew link mysql56 --force

Đây là cách để liên kết tệp thư viện ... thay vì sử dụng tùy chọn ln -s. Sử dụng brew liên kết mysql@5.7 --force cho phiên bản cập nhật
Vahid Kowsari

Cảm ơn. Tôi đã làm brew link mysql@5.7 --force. Hoạt động hoàn hảo.
Aye Mon Chit

2

Để chắc chắn liên kết biểu tượng nào là cần thiết (phụ thuộc vào phiên bản mysql và phiên bản hệ điều hành):

$ locate libmysqlclient.18.dylib
/usr/local/mysql-5.6.24-osx10.8-x86_64/lib/libmysqlclient.18.dylib

và vì thế :

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

2

Điều này phù hợp với tôi:

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

Kết thúc là một sự thay đổi đối với tôi ...ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib
treejanitor

1

Tôi đang sử dụng Rails REE (2.3.4) cho một hệ thống cũ mà chúng tôi có. Sau khi nâng cấp lên El Capitan, việc chạy script / console đã xảy ra lỗi và ứng dụng của tôi sẽ không khởi động được nữa (sử dụng pow):

$ script/console
Loading development environment (Rails 2.3.4)
/blah-blah/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_specification.rb:76:in establish_connection:RuntimeError: Please install the mysql2 adapter: gem install activerecord-mysql2-adapter (dlopen(/blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle
  Reason: image not found - /blah-blah/gems/mysql2-0.2.19b4/lib/mysql2/mysql2.bundle)


Từ chính chuỗi này, ở trên, tôi đã xác định rằng tôi cần phải phát hành lệnh này trong terminal:
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
Lệnh này tạo ra lỗi: "ln: /usr/lib/libmysqlclient.18.dylib: Hoạt động không được phép". Tôi chưa bao giờ thấy lỗi đó trước đây.

Sau khi tìm hiểu khá kỹ, tôi đã tìm thấy bài viết này: http://www.macworld.com/article/2986118/security/how-to-modify-system-integrity-protection-in-el-capitan.html và làm theo hướng dẫn tắt SIP (Bảo vệ toàn vẹn hệ thống mới của El Capitan). Sau khi tắt SIP và sau khi khởi động lại, lệnh ln hoạt động tốt. Sau đó, tôi đã tắt SIP. Bây giờ tất cả đều ổn. Ứng dụng của tôi chạy lại bằng cách sử dụng pow và không có lỗi khi chạy script / console. Tôi hy vọng cái này sẽ giúp bạn.


1

Trên Mac Sierra nếu sử dụng Homebrew thì thực hiện:

sudo ln -s /usr/local/Cellar/mysql@5.6/5.6.34/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib


1

Điều này đã làm việc cho tôi. Tất cả những gì tôi phải làm là gỡ cài đặt gem mysql2 và cài đặt lại bằng các lệnh dưới đây

gem uninstall mysql2
gem install mysql2 -v '0.3.18' -- --with-mysql-config=/usr/local/Cellar/mysql@5.7/5.7.28/bin/mysql_config

1

Tôi đang sử dụng Mac OS và tôi đã gặp phải lỗi này ngay cả sau khi gỡ cài đặt / xóa tất cả mysql và MAMP. Trước đó, tôi đã cài đặt brew install mysqlvà cũng sử dụng MAMP. addling softlink không hoạt động với tôi.

Nó chỉ được giải quyết bằng cách xóa tất cả các mysql hiện có. và sau đó cài đặt mysql thông qua MySQL từ đây .


0

sử dụng điều này từ dòng lệnh của bạn:

sudo install_name_tool -id /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/local/mysql-connector-c-6.1.3-osx10.7-x86_64/lib/libmysqlclient.18.dylib

đã thử trên một vài máy tính với maverick luôn hoạt động


0

Nếu bạn đang sử dụng Bitnami RubyStack và gặp sự cố tương tự. Hãy thử cái này

sudo ln -s /Applications/rubystack-2.0.0-17/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

0

Vấn đề của tôi với việc tải tệp gói đó là liên kết biểu tượng không hợp lệ. Vì vậy, hãy kiểm tra liên kết và thay thế nó bằng một liên kết mới nếu cần. Mọi thứ đã rơi vào đúng vị trí tại thời điểm đó. Không chắc điều đó đã xảy ra như thế nào, nhưng nó đã xảy ra. Lần đầu tiên xảy ra lỗi cú pháp như vậy.


0

Tôi đang làm việc với lệnh mô hình rails g và tôi gặp lỗi này:

Library not loaded: libmysqlclient.18.dylib

Tôi đã thử điều này và nó hoạt động cho tôi. Tôi đang sử dụng Mavericks 10.9.5

sudo ln -s /usr/local/mysql-5.6.19-osx10.7-x86_64/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Cảm ơn!

Bây giờ tôi đang sử dụng Yosemite 10.10.5 và tôi gặp lỗi tương tự, vì vậy tôi chỉ chạy lệnh này trên thiết bị đầu cuối và nó đã được sửa thành công.

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

bạn cũng có thể thử:

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

Cả hai đều làm việc tốt cho tôi. Hy vọng nó có thể hữu ích!


0

Tôi gặp sự cố này "Thư viện không được tải: libmysqlclient.18.dylib" khi nhập MySQLdb từ MySQL Đối với python3 :

    Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/MySQLdb/__init__.py", line 19, in <module>
    import _mysql
ImportError: dlopen(/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so, 2): Library not loaded: libmysqlclient.18.dylib
  Referenced from: /opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/MySQL_python-1.2.4-py3.5-macosx-10.11-x86_64.egg/_mysql.cpython-35m-darwin.so
  Reason: image not found

Giải pháp phù hợp với tôi: Mac OS X 10.11.1 Python3.5

Edit ~/.bash_profile:
export PATH="/opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin:$PATH"
export PATH="/opt/local/bin:/opt/local/sbin:$PATH"
export PATH="/usr/local/mysql/bin:$PATH"
export PATH="/usr/local/mysql/lib:$PATH"
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

@MSU_Bulldog Tất nhiên nó trả lời câu hỏi. Nó thậm chí còn cung cấp thông tin mới. Chỉ vì một câu trả lời bao gồm lỗi đã đưa họ đến đây không có nghĩa là giải pháp mà họ cung cấp cũng không có giá trị.
Artjom B.

0

Điều duy nhất hiệu quả với tôi là:

sudo install_name_tool -change libmysqlclient.18.dylib \
/usr/local/mysql-5.6.23-osx10.8-x86_64/lib/libmysqlclient.18.dylib \
/Library/Ruby/Gems/2.0.0/gems/mysql2-0.4.3/lib/mysql2/mysql2.bundle

Thay thế đường dẫn của mysql và đá quý để phù hợp với hệ thống của bạn.


0

Sau rất nhiều googling và thử tất cả ở trên ... điều duy nhất giải quyết được vấn đề của tôi là lệnh này:

$install_name_tool -id /usr/local/lib/libmysqlclient.18.dylib /usr/local/lib/libmysqlclient.18.dylib

Tôi đang sử dụng macbook pro, OSX 10 El Capitan. Darwin xxxx-MacBook-Pro.local 15.6.0 Darwin Kernel Phiên bản 15.6.0: Thứ Sáu 23 tháng 6 18:25:34 PDT 2016; XXX: xnu-3248.60.10 ~ 1 / RELEASE_X86_64 x86_64 Perl: v5.18.2 Mysql: 5.6.19


0

Cảm ơn. Bản nâng cấp Homebrew đã khiến các ứng dụng Rails của tôi gặp sự cố trên máy Mac. Tôi đã cài đặt lại MySQL (5.7) từ nguồn, sau đó tôi phải làm điều này

sudo ln -s /usr/local/mysql-5.7.28-macos10.14-x86_64/lib/libmysqlclient.20.dylib /usr/lib/libmysqlclient.20bdylib

dựa trên những gì tôi đã đọc ở trên và trong Gemfile của tôi

gem 'mysql2', '0.5.3'

và trong database.yml

adapter: mysql2

0

Đã có rất nhiều câu trả lời cho câu hỏi này, đặc biệt là câu trả lời https://stackoverflow.com/a/10847618/5515861 . Tôi chỉ muốn thêm một vài ghi chú. Nếu các bạn sử dụng Mac, tôi không biết các bạn cài đặt MySQL như thế nào, nhưng điều đầu tiên cần điều tra là cài đặt MySQL của bạn nằm ở đâu. Đối với tôi, MySQL được cài đặt bằng cách sử dụng brewphiên bản 5.7và vị trí /usr/local/opt/mysql@5.7/, vì vậy hãy thêm phần sau vào của tôi ~/.zshrc.

MYSQL=/usr/local/opt/mysql@5.7/bin/
MYSQL_LIB=/usr/local/opt/mysql@5.7/lib/
export PATH=$PATH:$MYSQL
export DYLD_LIBRARY_PATH=$MYSQL_LIB:$DYLD_LIBRARY_PATH

Hy vọng bạn khắc phục sự cố của mình 😁

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.