Rails控制台在使用JRuby时出现问题:没有提示符,没有制表符自动完成,箭头键失灵等。

11

我在JRUBY下使用Rails控制台时遇到了各种问题,包括:

  • 没有提示字符
  • Tab 键无法补全(插入了字面上的 Tab 键)
  • 向上/向下箭头不能浏览历史命令(分别插入 ^[[A^[[B
  • 向左/向右箭头不能移动光标(分别插入^[[D^[[C
  • Home/End 键不能将光标移动到行的开头和结尾(分别插入 1~4~ );Ctrl+a / Ctrl+e 可以正常工作
  • Ctrl+c 会终止整个控制台而不是当前输入的命令行
  • Ctrl+d 无效,直到我按下 Enter (然后在我的 Unix shell 中执行Ctrl+dEnter 之间输入的任何内容)。

我是通过 rvm 安装 JRuby 解释器的:

rvm install jruby-1.6.8 --1.9

我的 Rails 项目使用 Bundler 进行管理(不是 rvm gemsets),因此我使用 bundle exec rails c 命令运行 Rails 控制台。有趣的是,原始的 irb 以及 bundle exec irb 命令没有上述大部分问题,除了 Home/End 键和 Ctrl+c 需要在获取新提示行前按下 Enter

我可以使用一个简单的 Rails Gemfile 复制这个问题:

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

我的shell是zsh,运行在Ubuntu 12.04 64位上。 $JAVA_HOME/usr/lib/jvm/java-7-openjdk-amd64,但我安装这个解释器时可能仍然是java-6,如果这很重要。

更新:一些修复

缺失的提示符字符显然是由于Rails控制台将IRB.conf[:PROMPT_MODE]设置为:NULL造成的。 对于常规的irb,我的设置为:RVM(显然rvm在~/.rvm/scripts/irb.rb中这样做;通过注释脚本来排除rvm引起此问题)。 在~/.irbrc中提供:PROMPT_MODE值可以解决此问题。 我认为类似的问题可能会通过更改:IGNORE_SIGINT:IGNORE_EOF引起Ctrl+c / Ctrl+d问题,但它们都设置为其默认值。

通过将:USE_READLINE设置为true,可以解决制表符补全和箭头键的问题。

这是我的当前的~/.irbrc文件,它似乎解决了上述问题:

require 'irb/completion'

IRB.conf[:PROMPT_MODE]  = :SIMPLE
IRB.conf[:USE_READLINE] = true
IRB.conf[:AUTO_INDENT]  = true
2个回答

6

对于这种问题,我通过以下方式运行控制台解决了:

jruby -Xlaunch.inproc=true -S rails c

如果您不想每次都运行该命令,可以设置一个环境变量:
set JRUBY_OPTS=-Xlaunch.inproc=true

或者

export JRUBY_OPTS=-Xlaunch.inproc=true

那么

rails c

1
运行得非常好。在Windows上,设置 JRUBY_OPTS=-Xlaunch.inproc=true 并输入 rails c 即可按照预期运行。 - Nikolai Manek

2

我曾经在Windows上遇到过这个问题,解决方法是增加命令提示符设置中的“缓冲区数量”。 命令提示符 -> 属性 -> 选项 -> 缓冲区数量 默认值为4,我将其更改为8,然后一切正常(我认为5也可以)。


很高兴你能解决问题,但是我使用的是Linux系统,不确定是否有类似的选项。 - Abe Voelker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接