Подтвердить что ты не робот

Консоль Rails работает невероятно медленно при редактировании текста

В одном из моих приложений с рельсами консоль запускается очень медленно, когда я вставляю текст, тип и (особенно) удаляю текст. Я вижу сверху, что irb использует множество процессоров. Но я не знаю, как лучше диагностировать эту проблему. Это только начало происходить пару недель назад. Мне интересно, не связано ли это с readline/wirble? Я использую оба из них.

Я просто попробовал его в другом приложении, вставляя в блок текста, и это выглядит так же плохо: текст появляется со скоростью один char в секунду! Может быть, моя история командной строки пополнилась или что-то еще? Как я могу удалить его? (для консоли rails, а не моей истории командной строки bash)

благодарен за любой совет - max

Изменить - извините, должно было предоставить некоторые детали системы. Вот вы:

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

Я просто попробовал простой irb, и у меня такая же проблема. Это может быть даже медленнее, он почти полностью остановился на полпути через блок текста, который я вставил, чтобы проверить его.

Я перезагружался много раз (моя батарея ноутбука измотана, поэтому я должен перезапускать каждый раз, когда я все равно отключу его от сети).

Я не в vm.

Недавно я начал использовать RVM (рубиновый менеджер версий) и, похоже, совпал с этим, хотя это может быть просто совпадение. Проблемные консоли происходят с использованием системного рубина, хотя и не 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
4b9b3361

Ответ 1

Кажется, что rvm readline вызывает медленность, поместите эту строку в ваш ~/.irbrc:

IRB.conf[:USE_READLINE] = false

Теперь попробуйте вставить что-нибудь на irb. Это быстро? Хорошо!

Только проблема в том, что вы потеряли возможность редактировать свои строки. Нам нужно исправить rvm readline.

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

Не забудьте отредактировать строку IRB.conf с вашего irbrc.

Ответ 2

Просто использование 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

Ответ 3

Я столкнулся с тем же вопросом, что и REE, на Ubuntu 12.04 и без всяких проблем пробовал все перечисленные здесь решения. Окончательным рабочим решением для меня было:

  • apt-get удалить libreadline6-dev
  • apt-get install libreadline-gplv2-dev
  • rvm удалить 1.8.6
  • rvm install 1.8.6

Проблема представляется незначительной несовместимостью с libreadline6-dev. Когда libreadline6-dev присутствовал на машине, он будет использоваться при компиляции Ruby, и проблема возникнет. Это произойдет независимо от параметров -with-readline-dir, переданных при компиляции ruby. К сожалению, в последней версии Ubuntu нет libreadline5-dev, но есть libreadline-gplv2-dev.

Ответ 4

FWIW исправление, предлагаемое @fl00r, действительно работает. Для меня это новое поведение, похоже, коррелирует с установкой обновления Snow Leopard 10.6.7. Это происходит как в IRB, так и в Rails Console.

Другая вещь, которая, кажется, работает для меня, - это убедиться, что последняя строка вложенного теста включает в себя "голый" символ новой строки.

Это определенно новое поведение, и это очень раздражает.

Ответ 5

Я тоже вижу это на OS X. @fl00r исправляет работу (нажатие любой клавиши, пока паста пытается, гм, вставить.) @jesvs fix работает и является постоянным.