【问题标题】:Rails console running incredibly slowly when editing text编辑文本时,Rails 控制台运行缓慢
【发布时间】:2011-08-03 05:49:42
【问题描述】:

在我的一个 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 的输出:

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

【问题讨论】:

  • 在我的 Mac 上,文本显示速度非常慢,但如果我按任意键,它会立即出现。试试看
  • 在普通的 irb 中也会发生这种情况吗?
  • @Max——你没有说你使用的是什么操作系统或版本,但我会从命令行中的一个普通的 ps aux 开始,看看工作集中有什么。或者只是重新启动,看看问题是否消失。观察 Mac 活动监视器(如果你在 Mac 上)可能会给你一些线索——观察 cpu 和/或观察磁盘活动。
  • 我的问题是这个。你是在虚拟机里面工作吗?我是,并且发现我的主机操作系统中的进程(即 FireFox 的附加组件或扩展)会占用 CPU 周期。这会导致我的虚拟机运行缓慢。
  • @Rein、@Steve、@Tass,参见对 OP 的编辑

标签: ruby-on-rails ruby console


【解决方案1】:

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

【讨论】:

  • 它可以工作,但现在我失去了使用向上箭头执行先前命令的能力......有什么解决方法可以解决这个问题吗??
  • 不知何故,ruby-1.8.7-p371的配置脚本无法识别--with-readline-dir,所以我必须使用jordoh的解决方案来获取ruby 1.8.7才能使用libreadline 5.2 .
【解决方案2】:

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

我的 hack 解决了这个烦恼,是:

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

【讨论】:

  • 谢谢。这是对我使用 OS X 10.7 Lion 的唯一修复。
  • 这里使用带有 ree 的 Ubuntu 12.04。 jesvs 的修复对我没有任何改变。
【解决方案3】:

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

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

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

【讨论】:

【解决方案4】:

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

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

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

【讨论】:

  • 嗨,咆哮者。我用的是ubuntu,不是mac。我没有进行任何升级。此外,此问题不仅出现在粘贴文本中,而且出现在正常键入和删除字符时。 ://
【解决方案5】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多