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

时间:2011-04-11 16:55:32

标签: ruby-on-rails ruby console

在我的一个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,我遇到了同样的问题。它甚至可能更慢,在我粘贴的文本块中途停止测试它的时间非常接近。

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

我不在vm。

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

以下是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

5 个答案:

答案 0 :(得分:17)

似乎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行。

答案 1 :(得分:4)

简单地使用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

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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