2009-09-19 14 views
25

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 y a prueba de idiotas.Error básico de Rails 404 Página

De todos modos, todo lo que quiero hacer es tener una sola página estática 404.html que se carga cada vez que se produce un error. Lo ideal es que esto solo suceda en la producción y la puesta en escena.

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

Cualquier ayuda es muy apreciada.

+0

Buena @chishomer pregunta, me dieron mejor respuesta. Mira esto. http://stackoverflow.com/questions/1447627/basic-rails-404-error-page/8987083#answer-8987083 –

Respuesta

19

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 establecido error_pages/404.html y hay que ir

... o tal vez soy precavido con la excepción y debe rescatar de RuntimeError lugar.

+1

Gracias por la respuesta, también quería agregar que hay un informe en profundidad que encontré sobre este tema http://www.perfectline.co.uk/blog/custom-dynamic-error-pages-in-ruby-on-rails – Schneems

+0

Parece que no funciona en Rails 3 – hoyhoy

+2

debería funcionar, aunque la documentación dice deberías usar 'Rails.application.config.consider_all_requests_local' en lugar de' ActionController :: Base.consider_all_requests_local'. –

14

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

2

No obtendrá un 404 cada vez que se produzca un error, ya que no todos los errores dan como resultado 404s. Es por eso que tiene 404, 422 y 500 páginas en su directorio público. Creo que los rieles han 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.

7

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

En los carriles de 3.1

Podemos utilizar, como 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). Puede utilizar la opción: estado para cambiar esto:

render: estado => 500

render: estado =>: prohibido

Rails understands both numeric and symbolic status codes.

Fore more information see this page

¡Aclamaciones!

0

Otra forma de hacer esto 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 

Así que cada vez que se eleva MyCustomException, Rieles lo trata como un habitual :not_found, lo que hace public/404.html.

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

config.consider_all_requests_local = false 

Leer más sobre config.action_dispatch.rescue_responses.

Cuestiones relacionadas