Консоль 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
Ответы
Ответ 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 работает и является постоянным.