ไม่สามารถเรียกใช้งาน“ rail console” ได้เนื่องจากมีข้อผิดพลาดกับ readline


87

ฉันไม่สามารถดำเนินการได้rails consoleเนื่องจากข้อผิดพลาดนี้:

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>'

ฉันติดตั้ง readline ผ่าน homebrew แล้ว ฉันต้องการใช้ rbenv แทน rvm ต่อไป

ขอบคุณที่อ่านคำถามของฉัน


คำตอบ:


278

ฉันมีปัญหาเดียวกันเมื่อเร็ว ๆ นี้กับ homebrew และ libreadline.7.x.dylib / libreadline.6.x.dylib

ฉันแก้ไขโดยเรียกใช้:

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

แหล่งที่มา: https://github.com/rails/rails/issues/26658


1
ช่างเป็นการแฮ็ก :) แต่มันก็ใช้ได้ดีสำหรับตอนนี้: D ขอบคุณ!
haslo

18
การใช้ symlinks เพื่อหลอกให้ระบบใช้หมายเลขเวอร์ชัน (major!) ที่แตกต่างออกไปนั้นเป็นความคิดที่ไม่ดี จะเป็นการดีหากมีผู้รู้เพิ่มเติมสามารถอธิบายได้ว่าเหตุใดการแก้ไขข้างต้นจึงปลอดภัย
Pistos

คุณคือตำนานขอบคุณสำหรับสิ่งนี้ @wiz ควรทำเครื่องหมายว่าคุณถูกต้อง!
Nick Schwaderer

1
การตรวจสอบคร่าวๆเกี่ยวกับการเปลี่ยนแปลงระหว่าง libreadline 6.3 และ 7.0 จะไม่แสดงสิ่งที่ดูเหมือนจะเป็นการเปลี่ยนแปลงที่ผิดปกติคาดว่าในกรณีที่ซอฟต์แวร์อาจอาศัยพฤติกรรมที่ไม่มีเอกสารหรือบั๊ก ฉันสบายใจที่จะลองใช้วิธีนี้โดยคำนึงถึงสิ่งนั้น
Lyndsy Simon

58

Homebrew นั้นยอดเยี่ยม แต่นาน ๆ ครั้งมันก็เล่นได้ไม่ดีกับบางส่วนที่เคลื่อนไหวอื่น ๆ

brew update && brew upgradeนำเข้ามาในlibreadline.7.x.dylibขณะที่ถอดโดยอัตโนมัติlibreadline.6.x.dylibซึ่งทับทิมก็ยังคงอาศัย

อาจมีวิธีที่ฉลาดกว่านี้ในการแก้ไขปัญหา แต่พลังเดรัจฉานทำงานให้ฉัน:

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

ข้างต้นถือว่ามี rbenv ruby-buildและแน่นอนbundler; แทนที่2.3.1ด้วยทับทิมรุ่นใดก็ได้ที่คุณใช้

โปรดทราบว่าปัญหาที่คล้ายกันนี้อาจเกิดขึ้นได้กับไลบรารีที่มีการจัดการ homebrew ที่แตกต่างกัน ( ดูคำตอบของฉันเองสำหรับเรื่องนี้ )


มีสิ่งเดียวกันเกิดขึ้นกับฉัน - ฉันสงสัยว่าไม่มีวิธีใดที่ Homebrew จะสังเกตเห็นว่า libs บางตัวเชื่อมโยงกับอุปกรณ์ Homebrew บางรุ่นที่เก่ากว่า
slhck

2
สิ่งนี้ใช้ได้ผลสำหรับฉันใน El Capitan พร้อมกับgem install bundlerหลังจากติดตั้ง rbenv
รองเท้าทอมือ

ข้อผิดพลาดจะเกิดขึ้นเมื่อฉันเรียกใช้brew update && brew upgradeอีกครั้งหรือไม่?
Frank Fang

1
@FrankFang มันอาจจะใช่หรือไม่ใช่ไม่ใช่แค่สำหรับข้อผิดพลาดนี้โดยเฉพาะ ทุกครั้งที่มีการbrew upgradeแทนที่ไลบรารีที่เก่ากว่าด้วยเวอร์ชันที่ใหม่กว่ามีโอกาสบางอย่างที่โปรแกรมอื่น ๆ ในระบบของคุณจะบ่น
Giuseppe

26

ฉันใช้ OSX, ruby2.3.0, ราง 5 การเพิ่มgem 'rb-readline'การGemfileแก้ไขปัญหานี้ของฉัน


1
gem rb-readline ทำงานให้ฉัน ฉันเพิ่มลงใน: development,: test group - nice quick fix!
tnum

21

ฉันได้รับข้อผิดพลาดเดียวกันกับ Ruby 2.1.0 และราง 4.0 หลังจากค้นหาและพยายามมามากในที่สุดมันก็ใช้ได้ดี :) นี่คือสิ่งที่ฉันทำ:

rvm cleanup all
rvm autolibs enable
rvm install 2.1.0 

วิธีอื่น ๆ :

brew update
brew uninstall readline
brew install readline

คำสั่ง autolibs จะบังคับให้ RVM ติดตั้งการอ้างอิงทั้งหมดดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องนี้

หวังว่าจะเป็นประโยชน์


2
cleanup rvmคุณอาจไม่จำเป็นต้อง แค่reinstallรุ่นทับทิม
Swaps

20

ตามที่ Sachin บอกเป็นนัยว่าการติดตั้ง readline แล้วติดตั้งทับทิมใหม่เป็นแนวทางที่ดีที่สุด - แต่รายละเอียดต่างกันเล็กน้อยสำหรับ rbenv จากเส้นทางไฟล์ของคุณฉันเดาว่าคุณใช้ Mac ดังนั้นสิ่งต่อไปนี้น่าจะช่วยได้:

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

สิ่งนี้นำมาจากวิกิที่สร้างด้วยทับทิมและการค้นหาโดย Google อย่างรวดเร็ว


อย่าลืมทำใหม่หลังจากทำสิ่งนี้
iGbanam

2
หลังจากติดตั้งเวอร์ชัน Ruby ที่มีอยู่แล้วใหม่พร้อมกับ readline การรันคำสั่งเช่นbundle installแสดงคำเตือนมากมายเช่น "การละเว้น bcrypt-3.1.11 เนื่องจากไม่ได้สร้างส่วนขยาย" เป็นข้อเสนอแนะในการตอบของคำถามนี้ , gem pristine --allการแก้ไขข้อผิดพลาดเหล่านั้นในครั้งเดียว
Rory O'Kane

8

ใช้ mac El Captainเวอร์ชั่นก็แก้ไขได้เพียงแค่ทำ

rvm reinstall your_ruby_version

(ชอบrvm reinstall ruby-2.3.1)

หวังว่านี่จะช่วยได้โชคดี!


นี่คือทั้งหมดที่ฉันต้องทำ
Pistos

การดำเนินการนี้จะติดตั้งเวอร์ชันปัจจุบันของคุณใหม่:rvm reinstall $(rvm current)
CTS_AE

นี่เป็นวิธีแก้ปัญหาที่ง่ายที่สุด แต่ต้องใช้เวลาพอสมควรในการติดตั้งใหม่ ยังคงเป็นวิธีที่ดีที่สุด imho
f055

1

นำมาจากผู้ใช้ github @enderahmetyurt (นี่เป็นทางออกเดียวที่เหมาะกับฉัน)

วิธีการแก้ปัญหา: เพิ่มgem 'rb-readline'เพื่อ Gemfile คุณในกลุ่มการพัฒนาและมัดติดตั้ง

เป็นทางออกที่ง่ายที่สุดสำหรับข้อผิดพลาด "readline" ที่ไร้สาระ


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.