2012-03-08 16 views
6

Estoy tratando de eliminar la ruta "atrapar todo" o "predeterminado" de una aplicación de raíles de producción. Estoy interesado en mantener la operación mientras recopilo un registro de su uso para poder reemplazarlo con las rutas codificadas.Uso de registro de la ruta predeterminada en los raíles

Así que, dado que tengo la siguiente línea de ruta predeterminada en mi archivo config/routes.rb.

match '/:controller(/:action(/:id))' 

¿Cómo puedo crear o recuperar un registro de cada vez que se llega a esa ruta? Este registro idealmente incluiría solo las solicitudes realmente manejadas por esta ruta junto con los parámetros y tendría que dejar que la ruta funcione normalmente.

Respuesta

7

Una manera de hacer esto es el cambio de la ruta predeterminada a:

match ':controller(/:action(/:id))(.:format)', :using_default_route => true 

continuación, poner la función siguiente en app/controllers/application_controller.rb

before_filter do 
    if params[:using_default_route] 
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}") 
    end 
end 
+0

Eres brillante buen señor. –

+0

excelente respuesta, no conocía esa función, gracias y +1 – apneadiving

+0

Solo una actualización. Si bien esto funciona para registrar las rutas entrantes, hace que la generación de ruta para la ruta predeterminada no coincida (ya que no se pasa using_default_route). Lo he arreglado agregando un segundo partido después del primero que permitirá la generación, y su existencia se recuperaría si se usa. Sin embargo, mi temor es que la eliminación de estas dos líneas eventualmente hará que esas vistas fallen. Sería genial si hubiera una manera de registrar la generación que también utiliza la ruta predeterminada. –

8

Otra posibilidad sería la de hacer uso de los carriles enrutador constraints opción:

match '/:controller(/:action(/:id))', constraints: -> (req) { 
    Rails.logger.info("Default route used: #{req.path.inspect}") 
    true 
} 

Nota: la lambda re se vuelve verdadero para que el partido tenga éxito.

Cuestiones relacionadas