2011-01-09 17 views
7

Hola, espero que me puedas ayudar.cómo manejar errores como 404/500 en rails3

Estoy tratando de encontrar una manera de dirigir al usuario a las páginas de error predeterminadas 404.html y 500.html en mi carpeta pública.

Entonces, cuando hay un error de enrutamiento o nomethod, debe dirigirse a. Ya probé algunas cosas en mi controlador de aplicación, pero no funcionó.

Muchas gracias !!

+0

Pensé que poner 404.htm y 500.htm en la carpeta pública está bien. Pero no estoy seguro. – PeterWong

+0

Obtuve esos por defecto. Pero no aparecen si se producen errores – daniel

Respuesta

19

Rails hace esto automáticamente cuando se ejecuta en modo de producción. Cuando carga su aplicación a un servidor en vivo, Rails se encarga de manejar esas excepciones y de mostrar las páginas de error correctas con el estado correcto del encabezado. Si está tratando de ver cómo son esas páginas (para pruebas o algo así), acceda a ellas directamente a través del http://localhost:3000/404.html

Cada vez que configure su aplicación Rails en un servidor en vivo (usemos Apache como ejemplo), usted proporcione la raíz del sitio como la carpeta /public en su aplicación. Luego, cada vez que se realiza una solicitud a esa dirección de servidor, Apache primero busca en esa carpeta pública e intenta servir un activo estático (esta es una opción configurable en [environment].rb). Si no puede encontrar la página solicitada, la solicitud se reenvía a través de la pila de Ruby.

En modo de producción, si Rails encuentra un error que no se maneja (es decir, comenzar, rescatar), arroja el error hasta la pila, que luego le dice a Apache (nuevamente, en mi ejemplo) que renderizar un error apropiado.

Éstos son algunos errores comunes que usted verá en el modo de desarrollo y lo que hacen en el modo de producción:

ActiveRecord::RecordNotFound => 404 (page not found) 
nil.method => 500 (server error) unless you turn off whiny nils 
ActionController::RoutingError => 404 (page not found) 
+0

bien, ¡muchas gracias! – daniel

+0

@DannyRe - He agregado más a mi respuesta que podría ser útil – sethvargo

2

sucede automáticamente si se ejecuta en modo de producción - no hay necesidad de que lo hace de forma manual.

2

Eche un vistazo a this post para redirigir todas las solicitudes que causan un error de enrutamiento.

Cuestiones relacionadas