Không thể thực thi "bảng điều khiển rails" do lỗi với dòng đọc


88

Tôi không thể thực thi rails consoledo lỗi này:

localhost:TwitterForZombies wiz$ rails c
/Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/irb/completion.rb:9:in `require': dlopen(/Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.2.1/readline.bundle, 9): Library not loaded: /usr/local/opt/readline/lib/libreadline.6.2.dylib (LoadError)
  Referenced from: /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.2.1/readline.bundle
  Reason: image not found - /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/x86_64-darwin12.2.1/readline.bundle
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/irb/completion.rb:9:in `<top (required)>'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands/console.rb:3:in `require'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands/console.rb:3:in `<top (required)>'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:38:in `require'
    from /Users/wiz/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/railties-3.2.9/lib/rails/commands.rb:38:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

Tôi đã cài đặt readline qua homebrew. Tôi muốn tiếp tục sử dụng rbenv thay vì rvm.

Cảm ơn bạn đã đọc câu hỏi của tôi.


Câu trả lời:


279

Gần đây tôi đã gặp sự cố tương tự với homebrew và libreadline.7.x.dylib / libreadline.6.x.dylib

Tôi đã giải quyết nó bằng cách chạy:

ln -s /usr/local/opt/readline/lib/libreadline.7.0.dylib /usr/local/opt/readline/lib/libreadline.6.dylib

nguồn: https://github.com/rails/rails/issues/26658


1
Thật là một hack :) Nhưng nó hoạt động tốt, bây giờ: D Cảm ơn!
haslo

18
Sử dụng các liên kết tượng trưng để lừa hệ thống sử dụng số phiên bản thực sự khác (chính!) Thường là một ý tưởng tồi. Sẽ rất tốt nếu ai đó hiểu biết hơn có thể giải thích tại sao cách khắc phục ở trên lại an toàn.
Pistos

Bạn là một huyền thoại, cảm ơn bạn vì điều này, @wiz lẽ ra phải đánh dấu bạn đúng!
Nick Schwaderer,

1
Đánh giá sơ bộ về những thay đổi giữa libreadline 6.3 và 7.0 không cho thấy bất kỳ điều gì có vẻ là một thay đổi đột phá, hãy mong đợi trong trường hợp phần mềm có thể dựa vào hành vi không có tài liệu hoặc lỗi. Tôi cảm thấy thoải mái khi thử giải pháp này vì điều đó.
Lyndsy Simon

58

Homebrew rất tuyệt, nhưng đôi khi nó không chơi tốt với một số phần chuyển động khác.

A được brew update && brew upgradeđưa vào trong libreadline.7.x.dylibkhi tự động loại bỏ libreadline.6.x.dylib, mà ruby ​​vẫn đang dựa vào.

Có thể có nhiều cách thông minh hơn để khắc phục sự cố, nhưng thói vũ phu phù hợp với tôi:

$ rbenv uninstall 2.3.1
$ rbenv install 2.3.1
$ cd /path/to/my/app
$ bundle

Trên giả định sự hiện diện của rbenv của ruby-buildvà, tất nhiên, bundler; thay thế 2.3.1bằng bất kỳ phiên bản nào của ruby ​​bạn đang sử dụng.

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 )


Điều tương tự vừa xảy ra với tôi - Tôi tự hỏi liệu có cách nào đó để Homebrew nhận thấy rằng một số lib được liên kết với các phiên bản cũ hơn của một số mà Homebrew cung cấp không?
slhck

2
Điều này đã làm việc cho tôi ở El Capitan, gem install bundlersau khi cài đặt rbenv.
handovensole

Có xảy ra lỗi khi tôi chạy brew update && brew upgradelại không?
Frank Fang

1
@FrankFang, có thể có hoặc không, và không chỉ đối với lỗi cụ thể này. Mỗi khi brew upgradethay thế BẤT KỲ thư viện cũ nào bằng một phiên bản mới hơn, có một số khả năng là các chương trình khác trong hệ thống của bạn sẽ phàn nàn.
Giuseppe

26

Tôi đang sử dụng OSX, ruby2.3.0, rails5. Thêm gem 'rb-readline'vào của tôi đã Gemfilekhắc phục sự cố này.


1
gem rb-readline đã làm việc cho tôi. Tôi đã thêm nó vào: development,: test group - sửa lỗi nhanh chóng!
tnum

21

Tôi gặp lỗi tương tự với Ruby 2.1.0 và rails 4.0. Sau khi tìm kiếm và cố gắng rất nhiều, cuối cùng nó hoạt động tốt :) Đây là những gì tôi đã làm:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

Các cách khác:

brew update
brew uninstall readline
brew install readline

Lệnh autolibs sẽ buộc RVM cài đặt tất cả các phụ thuộc, vì vậy bạn không cần phải lo lắng về điều đó.

Hy vọng nó hữu ích.


2
bạn có thể không cần cleanup rvm. chỉ reinstalllà phiên bản ruby.
Hoán đổi

20

Như Sachin đã gợi ý, cài đặt readline và sau đó cài đặt lại ruby ​​là cách tiếp cận lý tưởng - nhưng các chi tiết có một chút khác biệt đối với rbenv. Với các đường dẫn tệp của bạn, tôi đoán bạn đang sử dụng máy Mac, vì vậy những điều sau đây sẽ hữu ích:

brew install readline ruby-build
env CONFIGURE_OPTS=--with-readline-dir=`brew --prefix readline` rbenv install 1.9.3-p286

Điều này được lấy từ Wiki xây dựng ruby và tìm kiếm nhanh trên google.


đừng quên rehash sau khi làm điều này
iGbanam

2
Sau khi cài đặt lại phiên bản Ruby hiện có với readline, việc chạy một lệnh chẳng hạn như bundle installđã cho tôi thấy rất nhiều cảnh báo như “Bỏ qua bcrypt-3.1.11 vì phần mở rộng của nó không được xây dựng”. Như đã đề xuất trong câu trả lời cho câu hỏi này , hãy gem pristine --allsửa tất cả những lỗi đó cùng một lúc.
Rory O'Kane

8

Sử dụng mac, El Captainphiên bản, có thể sửa chữa chỉ bằng cách

rvm reinstall your_ruby_version

(giống rvm reinstall ruby-2.3.1 )

Hy vọng điều này sẽ giúp, chúc may mắn!


Đây là tất cả những gì tôi cần làm.
Pistos

Thao tác này sẽ cài đặt lại phiên bản hiện tại của bạn:rvm reinstall $(rvm current)
CTS_AE

Đây là giải pháp đơn giản nhất, nhưng phải mất một thời gian để cài đặt lại. Tuy nhiên, tốt nhất hãy tiếp cận imho.
f055,

1

được lấy từ người dùng github @enderahmetyurt (đây là giải pháp duy nhất phù hợp với tôi).

Giải pháp: Thêm gem 'rb-readline'vào Gemfile của bạn trong nhóm phát triểncài đặt gói .

Đó là giải pháp dễ dàng nhất cho các lỗi "readline" ngớ ngẩn.


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.