example ruby-on-rails routing http-status-code-404

ruby on rails - example - Página de error de Basic Rails 404



ruby grape example (5)

He estado buscando una respuesta simple a esto durante un tiempo ridículamente largo y parece que esto tiene que ser tan obvio y simple, porque nadie tiene un tutorial fácil, a prueba de idiotas.

De todos modos, todo lo que quiero hacer es tener una sola página estática de 404.html que se carga cada vez que se lanza CUALQUIER error. Idealmente, esto solo debería ocurrir en la producción y puesta en escena.

Siento que esto debería ser lo más fácil de hacer ... pero no puedo entenderlo.

Cualquier ayuda es muy apreciada.


Creo que si ejecuta en modo de producción, entonces 404.html en el directorio público se sirve cuando no hay rutas para una URL.


No obtendrá un 404 siempre que se produzca un error porque no todos los errores dan como resultado 404s. Es por eso que tiene 404, 422 y 500 páginas en su directorio público. Supongo que Rails ha considerado que estos son los errores más comunes. Como dijo Ben, 404 aparecerá cuando no pueda encontrar algo, 500 cuando la aplicación arroje un error. Entre los dos, puedes cubrir muchas de tus bases.


Otra forma de hacerlo es configurar su config/application.rb con lo siguiente:

module YourApp class Application < Rails::Application # ... config.action_dispatch.rescue_responses.merge!( ''MyCustomException'' => :not_found ) end end

Para que siempre que se MyCustomException , Rails lo trate como algo habitual :not_found , rendering public/404.html .

Para probar esto localmente, asegúrese de cambiar config/environments/development.rb a:

config.consider_all_requests_local = false

Lea más sobre config.action_dispatch.rescue_responses.


Si ejecuta en modo de producción, se sirven los archivos 404.html, 500.html, 422.html en el directorio público cada vez que se produjo el error respectivo, se mostrarán las páginas anteriores.

En rieles 3.1

Podemos usarlo a continuación: Rails 3.1 generará automáticamente una respuesta con el código de estado HTTP correcto (en la mayoría de los casos, esto es 200 OK). Puedes usar la opción: status para cambiar esto:

render: estado => 500

render: status =>: prohibido

Rails understands both numeric and symbolic status codes.

Para más información ver esta página.

¡Aclamaciones!


en su ApplicationController

unless ActionController::Base.consider_all_requests_local rescue_from Exception, :with => :render_404 end private def render_404 render :template => ''error_pages/404'', :layout => false, :status => :not_found end

Ahora configura error_pages/404.html y listo.

... o quizás sea demasiado cauteloso con Exception y deberías rescatar de RuntimeError en su lugar.