2011-04-11 17 views
14

En una de mis aplicaciones de rieles, la consola comenzó a funcionar muy lentamente cuando pego texto, escriba y (especialmente) elimine texto. Puedo ver en la parte superior que irb está usando mucha CPU. Pero no sé cómo diagnosticar este problema más. Simplemente comenzó a suceder hace un par de semanas. Me pregunto si es posible que esté relacionado con readline/wirble. Yo uso ambos.La consola de Rails se ejecuta increíblemente lentamente al editar texto

Acabo de probarlo en otra aplicación, pegando en un bloque de texto, y parece igual de malo - ¡el texto está apareciendo a razón de un par de caracteres por segundo! Tal vez mi historial de línea de comando se ha llenado o algo así? ¿Cómo puedo eliminarlo? (Para la consola de rieles, no es mi fiesta de la historia de la línea de comandos)

agradecido por cualquier consejo - max

Editar - lo siento, debería haber suministrado algunos detalles del sistema. Aquí tienes:

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

Acabo de probar IRB llano y tengo el mismo problema. Puede incluso ser más lento, está prácticamente parado hasta la mitad del bloque de texto que pegué para probarlo.

He reiniciado muchas veces (la batería de mi laptop está defectuosa, así que tengo que reiniciar cada vez que la desconecto).

No estoy en un vm.

Recientemente comencé a usar RVM (administrador de versiones ruby) y parece haber coincidido con eso, aunque podría ser solo una coincidencia. Las consolas problemáticas están sucediendo usando el rubí del sistema, sin embargo, no es un rvm.

Aquí está la salida de 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

En mi Mac, el texto aparece muy lentamente, pero si presiono cualquier tecla, aparece todo a la vez. Pruébalo – fl00r

+0

¿Esto sucede también en IRB? –

+0

@Max - no dijiste qué SO o versión usabas, pero comenzaría con un ps aux simple desde la línea de comandos para ver qué hay en el conjunto de trabajo. O simplemente reinicie y vea si el problema desaparece. Ver el Monitor de actividad de Mac (si está en una Mac) podría darle alguna pista: mire la CPU y/o mire la actividad del disco. –

Respuesta

0

Fwiw el arreglo sugerido por @ fl00r en realidad funciona. Para mí, este nuevo comportamiento parece correlacionarse con la instalación de la actualización Snow Leopard 10.6.7. Sucede tanto en IRB como en Rails Console.

Otra cosa que parece funcionar para mí es asegurarse de que la última línea de la prueba pegada incluya un carácter de línea nueva "desnudo".

Esto es definitivamente un nuevo comportamiento y es muy molesto.

+0

ho rantler. Estoy usando ubuntu, no mac No he hecho ninguna actualización. Además, este problema ocurre no solo al pegar texto, sino también al tipear y borrar caracteres normales. :/ –

17

Parece que readline de RVM está causando la lentitud, poner esta línea en su ~/.irbrc:

IRB.conf[:USE_READLINE] = false 

Ahora intente pegar algo en IRB. ¿Es rápido? ¡Bueno!

El único problema ahora es que ha perdido la capacidad de editar sus líneas. Necesitamos arreglar la línea de lectura de rvm.

# 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 

No olvide editar la línea IRB.conf de su irbrc.

+2

rvm pkg install readline – ktec

+0

Funciona, pero ahora perdí la habilidad de usar la flecha hacia arriba para ejecutar comandos anteriores ... ¿Alguna solución que resuelva eso? – iwiznia

+0

De alguna manera, --with-readline-dir no es reconocido por el script de configuración de ruby-1.8.7-p371, así que tengo que usar la solución de jordoh para obtener Ruby 1.8.7 para usar libreadline 5.2. –

0

Lo veo en OS X también. La reparación de @ fl00r funciona (presionando cualquier tecla mientras la pasta intenta, um, pegar). @jesvs fix works y es permanente.

4

Simplemente el uso de readline no me ayudó; parece haber un problema más profundo con libreadline, al menos en OSX 10.7, donde la llamada al sistema select() espera a que expire el tiempo de espera antes de regresar, incluso cuando hay datos disponibles.

Mi truco, que soluciona este inconveniente, es:

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

Gracias. Esta es la única solución que funcionó para mí con OS X 10.7 Lion. –

+0

Lo mismo aquí usando Ubuntu 12.04 con ree. La solución de jesvs no cambió nada para mí. –

3

me encontré con el mismo problema usando REE en Ubuntu 12.04 y probado todas las soluciones aquí enumeradas sin ningún éxito. La solución de trabajo final para mí fue:

  1. apt-get remove libreadline6-dev
  2. apt-get install-libreadline GPLv2-dev
  3. RVM eliminar 1.8.6
  4. RVM instalar 1.8.6

La cuestión parece haber una incompatibilidad menor con libreadline6-dev. Cuando libreadline6-dev estaba presente en la máquina, se usaría al compilar Ruby, y el problema ocurriría. Esto sucedería independientemente de las opciones --with-readline-dir pasadas al compilar ruby. Desafortunadamente, en la última versión de Ubuntu, no hay libreadline5-dev, pero hay libreadline-gplv2-dev.

+0

Algunos detalles adicionales para las versiones ejecutivas de Ubuntu anteriores a Oneiric http://www.williambharding.com/blog/rails/fix-irb-pasting-is-super-slow-typing-in-ruby-debugger-has-lag / – wbharding

Cuestiones relacionadas