Проблемы с консолью Rails с использованием JRuby: нет символа приглашения, не заполняется вкладка, сломанные клавиши со стрелками и т.д.

У меня возникают проблемы с моей консолью Rails под JRuby, включая

  • Нет приглашающего символа
  • Tab завершение не работает (вставляется литеральная вкладка)
  • Стрелки вверх/вниз не просматривают историю (^[[A или ^[[B вставлены соответственно)
  • Стрелки влево/вправо не перемещаются (^[[D или ^[[C вставлены соответственно)
  • Home/End ключи, не перемещающие курсор в начало/конец строки (вместо 1~ или 4~ вставлены соответственно); Ctrl + a/Ctrl + e работает, хотя
  • Ctrl + c консоль убийства вместо того, чтобы убить строку, в которую я вхожу
  • Ctrl + d не имеет никакого эффекта, пока я не нажму Enter (который затем выполняет все, что я ввел между Ctrl + d и Enter в моей оболочке Unix).

Я установил свой интерпретатор JRuby из rvm следующим образом:

rvm install jruby-1.6.8 --1.9

Проект My Rails управляется с помощью Bundler (не rvm gemsets), поэтому я запускаю консоль Rails с помощью bundle exec rails c. Интересно, что raw irb, а также bundle exec irb не имеют большинства из вышеперечисленных проблем, кроме ключей Home/End и Ctrl + c требуется Enter, прежде чем я получу свежий оперативная линия.

Я могу реплицировать проблему с помощью barebones Rails Gemfile:

source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem 'sqlite3'

Моя оболочка zsh, на Ubuntu 12.04 64-bit. $JAVA_HOME есть /usr/lib/jvm/java-7-openjdk-amd64, но, возможно, он все еще был java-6, когда я устанавливал этот интерпретатор, если это имеет значение.

Обновление: некоторые исправления

Отсутствующий символ подсказки, по-видимому, вызван настройкой IRB.conf[:PROMPT_MODE] на :NULL с помощью консоли Rails. Для обычного irb мой получает значение :RVM (очевидно, rvm делает это в ~/.rvm/scripts/irb.rb; я исключил rvm, вызвав эту проблему, комментируя script). Предоставление значения :PROMPT_MODE в ~/.irbrc устраняет это. Я подумал, что, возможно, подобная проблема вызывала проблемы Ctrl + c/Ctrl + d, меняя :IGNORE_SIGINT и :IGNORE_EOF, но оба они установлены в значения по умолчанию.

Завершение вкладки и клавиши со стрелками фиксируются установкой :USE_READLINE на true.

Здесь мой текущий ~/.irbrc, который, кажется, исправляет указанные проблемы:

require 'irb/completion'

IRB.conf[:PROMPT_MODE]  = :SIMPLE
IRB.conf[:USE_READLINE] = true
IRB.conf[:AUTO_INDENT]  = true

Ответ 1

Запуск консоли со следующими исправлениями для меня:

jruby -Xlaunch.inproc=true -S rails c

Если вам не нравится запускать эту команду каждый раз, вы можете установить переменную среды:

set JRUBY_OPTS=-Xlaunch.inproc=true

или

export JRUBY_OPTS=-Xlaunch.inproc=true

затем

rails c

Ответ 2

У меня была эта проблема с Windows, и исправление заключалось в том, чтобы увеличить "Количество буферов" в настройках командной строки. Командная строка → Свойства → Параметры → Количество буферов По умолчанию 4, я изменился на 8 и все работало хорошо (я думаю, 5 будет работать, хотя)