2011-05-04 5 views
6

actualización He intentado la captura de esta excepción en mi controlador de aplicación, pero fue en vano. También actualicé Passenger a 3.0.7 y envié un problema a su rastreador.pasajero muere en UnknownHttpMethod excepción


que tienen una aplicación Rails 3.0.4 se ejecuta en FreeBSD 8.2 con Apache 2.2.17, 3.0.2 pasajeros y Ruby 1.9.2-p180 que ha estado muriendo cada dos días. Aquí está la traza inversa del registro de errores:

[ pid=85853 thr=17189069660 file=utils.rb:176 time=2011-05-04 12:08:13.022 ]: 
*** Exception ActionController::UnknownHttpMethod in application 
(U<F9>i<CA>,fs<C8>6<F6><C0>b<F2><C5>hVj<BE><D9>#<F5><80><99><EA>=n, 
accepted HTTP methods are OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT, 
PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, VERSION-CONTROL, REPORT, CHECKOUT, 
CHECKIN, UNCHECKOUT, MKWORKSPACE, UPDATE, LABEL, MERGE, BASELINE-CONTROL, MKACTIVITY, 
ORDERPATCH, ACL, SEARCH, and PATCH) (process 85853, thread #<Thread:0x0000080118c6b8>): 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/actionpack-3.0.4/lib/action_dispatch/http/request.rb:76:in `request_method' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/railties-3.0.4/lib/rails/rack/logger.rb:24:in `before_dispatch' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/railties-3.0.4/lib/rails/rack/logger.rb:12:in `call' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/rack-1.2.1/lib/rack/runtime.rb:17:in `call' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/rack-1.2.1/lib/rack/lock.rb:11:in `block in call' 
      from <internal:prelude>:10:in `synchronize' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/rack-1.2.1/lib/rack/lock.rb:11:in `call' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/railties-3.0.4/lib/rails/application.rb:168:in `call' 
      from /usr/local/docs/arc/shared/bundle/ruby/1.9.1/gems/railties-3.0.4/lib/rails/application.rb:77:in `method_missing' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/rack/request_handler.rb:96:in `process_request' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_request_handler.rb:513:in `accept_and_process_next_request' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_request_handler.rb:274:in `main_loop' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:205:in `start_request_handler' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:170:in `block in handle_spawn_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/utils.rb:479:in `safe_fork' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:165:in `handle_spawn_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:180:in `start' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/rack/application_spawner.rb:128:in `start' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:253:in `block (2 levels) in spawn_rack_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server_collection.rb:132:in `lookup_or_add' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:246:in `block in spawn_rack_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server_collection.rb:82:in `block in synchronize' 
      from <internal:prelude>:10:in `synchronize' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server_collection.rb:79:in `synchronize' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:244:in `spawn_rack_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:137:in `spawn_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/spawn_manager.rb:275:in `handle_spawn_application' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:357:in `server_main_loop' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/lib/phusion_passenger/abstract_server.rb:206:in `start_synchronously' 
      from /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.2/helper-scripts/passenger-spawn-server:99:in `<main>' 
    [Wed May 04 12:08:13 2011] [notice] child pid 1567 exit signal Bus error (10) 
    [Wed May 04 12:08:16 2011] [notice] child pid 1195 exit signal Bus error (10) 
    [Wed May 04 12:08:20 2011] [notice] child pid 1600 exit signal Bus error (10) 
    [Wed May 04 12:08:20 2011] [notice] child pid 1590 exit signal Bus error (10) 
    [Wed May 04 12:08:21 2011] [notice] child pid 1199 exit signal Bus error (10) 
    [Wed May 04 12:08:21 2011] [notice] child pid 726 exit signal Bus error (10)...etc... 

Una vez que esto sucede, la aplicación se cae. Apache todavía sirve archivos estáticos en el directorio público, pero no en ninguna aplicación. Por supuesto, la jerigonza donde el verbo HTTP debe ser que me preocupa (y hace que sea imposible localizar a través de Google), pero el rescate de esta excepción en el application_controller realidad prevenir pasajeros de la muerte? ¿Alguien ha visto esto antes?

+1

puntos de bonificación por título pegadizo – sehe

+0

¡Gracias, siempre pensé que debería haber sido un periodista de fin de siglo! =) – dogenpunk

+0

Mientras estoy esperando la otra persona en el Internet que ha tenido que esto ocurra a ellos, aquí está mi solución inicial: llamar rescue_from ActionController :: UnknownHttpMethod, a continuación, registrar el error y devolver un estado 400. Publicaré otro comentario cuando, o si esto sucede nuevamente. – dogenpunk

Respuesta

0

para ser perfectamente honesto, parece que el servidor de aplicaciones (o fastcgi moduel Apache?) Está muriendo bastante poco elegante cuando se recibe un verbo HTTP ilegal.

estoy totalmente de esperar que pueda filtrar esto en la configuración de Apache para el sitio (ya sea/etc/apache2/site-disponible/... o .htaccess en la carpeta virtual (mod_access)

Sin embargo, Creo que es cuerdo simplemente reportar la traza a los desarrolladores de pasajeros como un error. la información está ahí mismo en la traza

U<F9>i<CA>,fs<C8>6<F6><C0>b<F2><C5>hVj<BE><D9>#<F5><80><99><EA>=n 

no es un verbo válida. podría ser trivial para reproducirse utilizando netcat en el puerto 80 de su servidor web (recuerde el encabezado de host)

+0

Gracias por el consejo. He enviado un problema a su rastreador googlecode. Estoy totalmente de acuerdo, sin embargo. Algo como esto nunca debería llegar a la aplicación en sí. – dogenpunk

+0

Voy a seguir adelante y aceptar esto. No he escuchado nada de los pasajeros, así que estoy buscando cómo hacer que apache se encargue de esto. – dogenpunk

Cuestiones relacionadas