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.