2012-03-04 17 views
9

Tengo un problema cuando una instancia de webkit_server con Capybara y capybara-webkit ejecutándose sin conexión conectada a una pantalla Xvfb local se cuelga al visitar una URL. Parece que sucede después de varios minutos de visitas repetidas a diferentes URL y ejecución de buscadores. (Estoy usando capibara para una aplicación de raspado de pantalla en Ruby vainilla, no para probar)webkit_server se cuelga periódicamente cuando se ejecuta desde Capybara en Ruby

He confirmado que cuando se cuelga el sitio aún está accesible (por ejemplo, mediante curl o wget en la línea de comandos) . También intenté ajustar el código de Ruby que invoca la visita y los buscadores posteriores en un bloque Timeout para que después de 60 segundos de espera se visite una nueva URL, pero cualquier intento de visita() falla después de la primera vez que esto ocurre. La única forma de solucionar el problema es eliminar el proceso Ruby invocando Capybara/capybara-webkit y el proceso webkit_server y reiniciar.

Cuando Strace el proceso webkit_server, veo una salida como ésta en varias ocasiones:

clock_gettime(CLOCK_MONOTONIC, {5821, 680279627}) = 0 
gettimeofday({1330890176, 712033}, {0, 33052112}) = 0 
gettimeofday({1330890176, 712087}, {0, 140736435864256}) = 0 
gettimeofday({1330890176, 712137}, {0, 33108640}) = 0 
clock_gettime(CLOCK_MONOTONIC, {5821, 680486036}) = 0 
clock_gettime(CLOCK_MONOTONIC, {5821, 680530091}) = 0 
read(7, 0x1fac1b4, 4096)    = -1 EAGAIN (Resource temporarily unavailable) 

Y si Strace el proceso Ruby que lo invoca, que es colgado en un read():

Process 3331 attached - interrupt to quit 
read(5, 
^C <unfinished ...> 
Process 3331 detached 

Sé que el código Ruby se cuelga en el método Capybara visit().

¿Alguna idea sobre lo que puedo hacer para solucionar o corregir esto se agradece. Supongo que el problema tiene algo que ver con algún recurso que webkit_server necesita para visitar la URL, pero no estoy seguro de qué probar a continuación.

Gracias!

+0

Además, por si sirve de algo, he intentado utilizar el controlador de Carpincho webkit_debug y subió propio registro de carpincho. Las últimas líneas de salida de depuración son: >> Visita >> >> 1 >> http: // [la URL del sitio] He intentado hacer uso de xwd a la captura de pantalla de lo que está sucediendo en este momento : xwd -root -display: 1 | xwdtopnm | pnmtopng> screenshot.png Pero solo me dan un rectángulo negro. –

Respuesta

1

que he visto este problema cuando está utilizando Carpincho WEBrick para ejecutar el servidor. Agrega "gem 'thin'" a tu Gemfile & y lo usará automáticamente. Ver si eso ayuda?

+0

Gracias. Desafortunadamente tengo que usar webkit_server, así que no creo que thin ayude en este caso particular. Sin embargo, puede ser útil con otros servidores. –

+2

Quizás estoy equivocado, pero pensé que webkit_server era solo un navegador sin cabeza. Capybara todavía está ejecutando Thin/Webrick/lo que sea para darle al navegador algo con lo que hablar, ¿no? –

+0

Descubrí que tenía que agregar explícitamente Thin Handler, como lo hizo Grimmo. – Empact

2

he encontrado que llamar Capybara.reset_sessions! después de un error parece corregir este problema. No estoy seguro de por qué, pero no he tenido el problema desde entonces.

+1

¿puede aclarar dónde agrega las reset_sessions?¿Está en un gancho después? ¿Cómo se condiciona su invocación ante la ocurrencia de un error? –

13

El capibara-webkit 1,0 cuelga al azar en la habitación entera para mí también.

Simplemente añadiendo 'delgada' no era suficiente. Pero el uso explícito de Thin Handler funcionó. Añadido a env.rb:

Capybara.server do |app, port| 
    require 'rack/handler/thin' 
    Rack::Handler::Thin.run(app, :Port => port) 
end 

Nota Thin advertencia de uso: https://github.com/thoughtbot/capybara-webkit/issues/399#issuecomment-22328028

+3

Si pudiera darle un 1000 upvotes lo haría. Después de horas de probar todo, esto lo hizo. También puede desactivar el registro de Thin molesto al inicio agregando: 'Thin :: Logging.silent = true' – yagooar

+0

Wasted 8 horas de mi vida en esto. ¡Gracias por el aviso! – stuartchaney

Cuestiones relacionadas