编辑文本时,Rails控制台运行速度极慢

在我的一个rails应用程序中,当我粘贴文本,键入和(特别是)删除文本时,控制台开始运行得非常慢。 我可以在顶部看到irb正在使用大量的cpu。 但我不知道如何进一步诊断这个问题。 它刚刚开始发生在几个星期前。 我想知道它是否可能与readline / wirble相关? 我使用这两个。

我只是在另一个应用程序中尝试过,粘贴在一个文本块中,看起来同样糟糕 – 文本以每秒一个字符的速率出现! 也许我的命令行历史已经填满了什么? 我怎么能删除它? (对于rails控制台,而不是我的bash命令行历史记录)

感谢任何建议 – 最多

编辑 – 抱歉,应该提供一些系统详细信息。 干得好:

System - Ubuntu 10.04 Ruby version - ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux] 

我只是尝试了简单的irb,我有同样的问题。 它甚至可能更慢,在我粘贴的文本块中途停止测试它的时间非常接近。

我重启了很多次(我的笔记本电脑电池已经开机了,所以无论如何我每次拔掉电源都要重新启动)。

我不是一个公共场所。

我最近开始使用RVM(ruby版本管理器),它似乎与此相符,尽管它可能只是巧合。 有问题的控制台正在使用系统ruby发生,但不是rvm。

这是ps aux | grep irb的输出 ps aux | grep irb

 max 12583 0.0 0.0 1756 484 pts/7 S+ Apr11 0:00 sh -c irb -r irb/completion -r "/home/max/work/rails_apps/millionaire_container/millionaire/config/environment" -r console_app -r console_with_helpers --simple-prompt max 12584 15.9 2.7 61872 56956 pts/7 S+ Apr11 158:26 irb max 13981 64.4 0.9 20080 18708 pts/9 R+ 09:40 29:51 irb max 14625 21.8 0.6 15020 12628 pts/12 Rl+ 10:25 0:20 irb max 14757 0.0 0.0 3048 804 pts/13 R+ 10:27 0:00 grep --color=auto irb 

似乎rvm的readline导致缓慢,把这一行放在〜/ .irbrc中:

 IRB.conf[:USE_READLINE] = false 

现在尝试在irb上粘贴一些东西。 它快吗? 好!

现在唯一的问题是你已经失去了编辑线条的能力。 我们需要修复rvm的readline。

 # assuming 1.8.6 is your rvm's default ruby version rvm package install readline rvm remove 1.8.6 rvm install 1.8.6 --with-readline-dir=$rvm_path/usr 

不要忘记从irbrc编辑出IRB.conf行。

简单地使用readline对我没有帮助; libreadline似乎存在更深层次的问题,至少在OSX 10.7上,select()系统调用在返回之前等待超时到期,即使有可用的数据。

解决这个烦恼的我的黑客是:

 cd $rvm_path/src/readline-6.2 vi config.h (change the line "#define HAVE_SELECT" -> #undef HAVE_SELECT) make install 

我在Ubuntu 12.04上使用REE遇到了同样的问题,并尝试了这里列出的所有解决方案,没有任何成功。 对我来说,最终的工作解决方案是:

  1. apt-get remove libreadline6-dev
  2. apt-get install libreadline-gplv2-dev
  3. rvm删除1.8.6
  4. rvm install 1.8.6

该问题似乎与libreadline6-dev有轻微的不兼容。 当libreadline6-dev存在于机器上时,它将在编译Ruby时使用,并且会出现问题。 无论编译ruby时传递的–with-readline-dir选项如何,都会发生这种情况。 不幸的是,在最新版本的Ubuntu中,没有libreadline5-dev,但是有libreadline-gplv2-dev。

FWIW @ fl00r建议的修复确实有效。 对我来说,这种新行为似乎与安装Snow Leopard 10.6.7更新有关。 它发生在IRB和Rails控制台中。

另一件似乎对我有用的事情是确保粘贴测试的最后一行包含一个“裸”换行符。

这绝对是新行为,非常烦人。

我也在OS X上看到它。 @ fl00r的修复工作(在粘贴尝试粘贴任何键时,嗯,粘贴。)@ jesvs修复工作并且是永久性的。