2016-06-16 15 views
14

Tôi đã cài đặt Ruby 2.3.0p0 qua rbenv, trên OS X 10.11.4. Trong một phiên IRB, lịch sử hoạt động tốt. Tuy nhiên, tôi không thể truy cập lịch sử IRB qua các phiên.Lịch sử IRB không hoạt động với Ruby 2.3.0

Tôi đã thử hệ thống Ruby, 2.0.0p648 và lịch sử của mình trong các phiên IRB hoạt động tốt. Tôi đã thử cài đặt cùng phiên bản Ruby đó qua rbenv, và nó cũng có lịch sử hoạt động.

Tôi đã so sánh các giá trị của IRB.conf giữa làm việc và phiên nonworking, và không có gì trông lạc lõng (mặc dù, thật là thú vị, IRB/ext/lưu-history.rb là một file trống trong cả hai trường hợp).

Nhìn vào tệp .irb_history của tôi, có vẻ như nó đang được thay thế, thay vì được nối, với các lệnh từ phiên mới nhất. Tôi có thể tải lên phiên IRB 2.0.0 và cuộn qua các lệnh đó tốt.

Tôi đã thử các câu trả lời được liệt kê trong rbenv irb history is not saving mà không thành công.

Tôi cũng đã thử câu trả lời đã chọn trong irb history not working. Tôi phải thay đổi câu trả lời đã chọn để thay thế phương thứC#nitems. Điều này cho thấy các dòng đã được đọc ra từ tệp lịch sử và được đẩy lên Readline::HISTORY. Tuy nhiên, việc kiểm tra Readline::HISTORY không hiển thị gì ở đó.

Tôi có thể sắp xếp hack trong lịch sử bằng cách thêm các dòng trước đó từ .irb_history vào lịch sử Readline qua Readline.readline và chỉ định add_hist = true. Tuy nhiên, nó chắc chắn không phải là cách thích hợp để thêm các lệnh trước đó vào Readline.

Tôi biết tôi có thể chuyển sang một cái gì đó như nâng lên, nhưng tôi muốn tìm hiểu điều này. Bất kỳ đề xuất nào về lý do tại sao các lệnh không được thêm vào Readline và cách thay đổi điều đó?

+0

Một điều bạn nói có vẻ xa lạ với tôi: bạn nói lưu-history.rb là trống. My '~/.rbenv/versions/2.3.0/lib/ruby ​​/ 2.3.0/irb/ext/save-history.rb' có đầy đủ mã mà làm cho lịch sử hoạt động. Tôi nghĩ rằng nếu bạn là trống, lịch sử irb sẽ không làm việc với hoặc không có readline. –

+0

Hmm. Tôi không có bản gốc 2.3.0 nữa, nhưng tôi vừa quay lại và nhìn vào 2.0.0 của tôi, và tệp save-history.rb thực sự có mã trong đó. Tôi không có một lời giải thích, khác hơn là bộ não của tôi là một chút chiên từ đào xung quanh về điều này. –

Trả lời

22

Chỉnh sửa dòng lệnh của OS X dựa trên thư viện libedit. OS X có một phiên bản của thư viện readline mà là một wrapper quanh libedit, nhưng nó không hoạt động hoàn toàn giống như GNU readline. Lịch sử IRB hoạt động trong Ruby được xây dựng với trình bao bọc OS X lên đến Ruby 2.1, nhưng Ruby 2.2 và sau đó cần phải được xây dựng với GNU readline cho lịch sử irb để làm việc.

Trong các trường hợp sau, 2.3.0 có thể là bất kỳ phiên bản Ruby nào từ 2.2.0 trở lên. Tôi đã viết 2.3.0 vì đó là những gì Evan đã sử dụng.

Sử dụng MacPorts

rbenv không biết về MacPorts, vì vậy bạn cần phải nói cho rõ ràng nó sử dụng readline MacPorts'.

  • sudo port install readline nếu chưa được cài đặt.
  • rbenv uninstall 2.3.0
  • RUBY_CONFIGURE_OPTS=--with-readline-dir=/opt/local rbenv install 2.3.0

Sử dụng Homebrew readline

rbenv automatically detects homebrew and looks in it for readline, vì vậy, nếu bạn đang sử dụng lịch sử Homebrew và IRB không làm việc, bạn có chưa cài đặt hoặc bạn xây dựng Ruby của bạn trước khi bạn cài đặt readline.

  • brew install readline nếu nó không được cài đặt sẵn
  • rbenv uninstall 2.3.0
  • rbenv install 2.3.0
+0

Cảm ơn Dave! Biên dịch ngay bây giờ, sẽ chấp nhận khi tôi có thể xác minh. Ngẫu nhiên, tôi vừa bỏ phiếu cho câu hỏi/câu trả lời của bạn trên http://stackoverflow.com/questions/37617519/is-etc-irbrc-installed-by-os-x-does-irb-read-it như là một phần của nghiên cứu Tôi đã làm. –

+0

Tôi đã viết rằng đó là một sản phẩm phụ của việc điều tra vấn đề irb. Chúng tôi đã ở trên cùng một đường mòn. –

+1

Cảm ơn, tôi đã có vấn đề chính xác này trên OS X khi chạy '' 'rails console''', với Ruby được cài đặt thông qua rbenv. Hơn nữa, tôi cũng sẽ nhận được lỗi "Không thể đọc cơ sở dữ liệu termcap, bằng cách sử dụng các thiết lập đầu cuối câm." Điều này dường như cũng khắc phục điều đó. –

Các vấn đề liên quan