2009-09-19 18 views
25

Sono stato alla ricerca di una risposta semplice a questo per un tempo ridicolmente lungo e sembra che questo deve essere così chiaramente evidente e semplice perché nessuno ha un tutorial facile, idiota.Basic Rails 404 Errore Pagina

In ogni caso, tutto ciò che voglio fare è avere una singola pagina statica 404.html che viene caricata ogni volta che viene generato QUALSIASI errore. Idealmente questo dovrebbe accadere solo nella produzione e nella messa in scena.

Mi sembra che questa dovrebbe essere la cosa più facile da fare ... ma non riesco a capirlo.

Qualsiasi aiuto è molto apprezzato.

+0

Buona domanda @chishomer, ho dato risposta migliore. Controllalo. http://stackoverflow.com/questions/1447627/basic-rails-404-error-page/8987083#answer-8987083 –

risposta

19

nel vostro 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 

ora istituito error_pages/404.html e ci si va

... o forse io sono troppo prudente con l'eccezione e si dovrebbe salvare dalla RuntimeError invece.

+1

Grazie per la risposta, volevo anche aggiungere che c'è una riscrittura approfondita che ho trovato su questo argomento http://www.perfectline.co.uk/blog/custom-dynamic-error-pages-in-ruby-on-rails – Schneems

+0

Non sembra funzionare su Rails 3 – hoyhoy

+2

dovrebbe funzionare, anche se la documentazione dice dovresti usare 'Rails.application.config.consider_all_requests_local' invece di' ActionController :: Base.consider_all_requests_local'. –

14

Credo che se si esegue in modalità di produzione, viene visualizzato 404.html nella directory pubblica ogni volta che non vi sono percorsi per un URL.

2

Non si ottiene un 404 ogni volta che viene generato un errore perché non tutti gli errori risultano in 404s. Ecco perché hai 404, 422 e 500 pagine nella tua directory pubblica. Credo che le rotaie abbiano ritenuto che questi fossero gli errori più comuni. Come ha detto Ben, 404 verrà visualizzato quando non riesce a trovare qualcosa, 500 quando l'applicazione genera un errore. Tra i due, puoi coprire molte delle tue basi.

7

Se si esegue in modalità di produzione, vengono visualizzati 404.html, 500.html, 422.html file nella directory pubblica ogni volta che si verifica l'errore corrispondente, verranno visualizzate le pagine dall'alto.

in Rails 3.1

Possiamo usare come di seguito: Rails 3.1 genera automaticamente una risposta con il codice di stato HTTP corretto (nella maggior parte dei casi, questo è 200 OK). È possibile utilizzare l'opzione: lo status di cambiare questo:

render: status => 500

render: status =>: vietato

Rails understands both numeric and symbolic status codes.

Fore more information see this page

Saluti!

0

Un altro modo per farlo è quello di configurare il vostro config/application.rb con il seguente:

module YourApp 
    class Application < Rails::Application 
    # ... 

    config.action_dispatch.rescue_responses.merge!(
     'MyCustomException' => :not_found 
    ) 
    end 
end 

modo che ogni volta MyCustomException è sollevato, Rails lo tratta come un normale :not_found, rendendo public/404.html.

per testare questo a livello locale, assicuratevi di modificare config/environments/development.rb a:

config.consider_all_requests_local = false 

Per saperne di più config.action_dispatch.rescue_responses.

Problemi correlati