2010-11-23 17 views
27

Estoy construyendo una aplicación Rails 3 en Heroku. En este momento, mis páginas de error y página 404 son todas las páginas estándar de rieles/heroku.Rails 3 - Personalizando el Error y páginas 404

Me gustaría personalizar estos dos. Tener una página para un error, y tienen una página para un 404.

Todos los tutoriales que aparecen en Google son años de edad, y no funcionan en los carriles 3.

¿Puede usted sugerir un buen tutorial moderna o consejos sobre cómo hacer lo anterior?

Gracias

Respuesta

36

Si desea capturar errores específicos, use rescue_from en ApplicationController.

De lo contrario, si lo que desea es editar las páginas de error por defecto, editar el 500.html y 400.html archivos en {Rails.root}/pública

3

Bueno rails3 sigue utilizando el mismo 404.html, 422.html y 500.html en la carpeta pública. Puedes personalizar esos.

Si estás hablando en realidad la captura de estas excepciones, y haciendo algunas cosas dinámica, creo que la funcionalidad básica es la misma, tener algún around_filter que le llame la excepción en particular en application_controller es decir ActiveRecord::RecordNotFound y hacer algo con eso.

11

2013 actualización para Rails 3.2 de Jose Valim

Cuando salió Rails 3.0, una de las características que la gente de repente pasó por alto fue la capacidad de manejar mejor las excepciones. El problema era que, como Rails 3 se convertía en mucho más Rack "fluido", tuvimos que mover algunas características a la pila de middleware y esto nos obligó a mover todo el manejo de excepciones también. Rails 3.2 intenta devolver algo de personalización al juego permitiéndole configurar su propia aplicación de rack de excepciones que se invoca cuando ocurre una falla. Por ejemplo, se puede configurar la aplicación excepciones a su propio router en tu config/application.rb:

config.exceptions_app = self.routes 

Ahora, cada vez que hay una excepción, el router va a ser invocado. Por lo tanto, para rendir 404 páginas, simplemente puede añadir a su router:

match "/404", :to => "errors#not_found" 

y aplicar la lógica en el controlador como desee! Sin embargo, hay algunas cosas a tener en cuenta si vas por este camino:

  1. Es necesario utilizar coincidencia en sus rutas y no GET/POST/PUT/borrar debido a que tales excepciones pueden ocurrir en cualquier HTTP solicitud;
  2. No podrá ver sus excepciones personalizadas en el desarrollo a menos que configure config.consider_all_requests_local en false en su configuración config/environments/development.rb.El motivo es que si la solicitud es considerada local, Rails siempre preferirá mostrar la página de excepciones de depuración ; [o ejecute rails server -e production]
  3. Siempre puede acceder a la excepción original en el controlador al env ["action_dispatch.exception"];
  4. No es posible establecer cookies, la sesión ni el flash después de ocurre una excepción. Todos ellos ya estaban serializados de nuevo en el cliente ;
  5. Por último, la aplicación de excepciones por defecto utilizado por los carriles que simplemente despliega una página, en público/Status.html está disponible aquí: action_dispatch/middleware/public_exceptions.rb

Recuerde que cualquier cosa que hagas en los errores controlador, no debería ser algo "elegante". ¡Manténgalo simple porque algo ya salió mal con su aplicación!