2011-01-09 9 views
7

Ehi, spero che tu possa aiutarmi.come gestire errori come 404/500 nei binari3

Sto cercando di trovare un modo per indirizzare l'utente alle pagine di errore predefinite 404.html e 500.html nella mia cartella pubblica.

Quindi quando c'è un errore di routing o nomethod dovrebbe essere indirizzato a. Ho già provato alcune cose nel mio controller dell'applicazione ma non ha funzionato.

Molte grazie !!

+0

Ho pensato che mettere 404.htm e 500.htm nella cartella pubblica sia ok. Ma non sono sicuro. – PeterWong

+0

Ho preso quelli lì dentro di default. Ma non si presentano se si verificano errori – daniel

risposta

19

Rails lo fa automaticamente quando si esegue in modalità produzione. Quando carichi la tua applicazione su un server live, Rails si occupa di gestire tali eccezioni e rendere le corrette pagine di errore con lo stato corretto dell'intestazione. Se stai cercando di vedere come appaiono queste pagine (per test o qualcosa del genere), accedi direttamente a loro tramite http://localhost:3000/404.html

Ogni volta che si imposta l'applicazione Rails su un server live (utilizziamo Apache come esempio), fornire la radice del sito come cartella /public nell'applicazione. Quindi, ogni volta che viene fatta una richiesta a quell'indirizzo del server, Apache prima cerca in quella cartella pubblica e prova a servire un asset statico (questa è un'opzione configurabile in [environment].rb). Se non riesce a trovare la pagina richiesta, la richiesta viene inoltrata attraverso lo stack Ruby.

In modalità di produzione, se Rails rileva un errore che non viene gestito (ad es., Avvio, salvataggio), genera l'errore fino allo stack, che indica ad Apache (di nuovo, nel mio esempio) a rende un errore appropriato.

Ecco alcuni errori comuni che vedrete in modalità di sviluppo e ciò che essi rendono in modalità di produzione:

ActiveRecord::RecordNotFound => 404 (page not found) 
nil.method => 500 (server error) unless you turn off whiny nils 
ActionController::RoutingError => 404 (page not found) 
+0

ok grazie mille !! – daniel

+0

@DannyRe - Ho aggiunto altro alla mia risposta che potresti trovare utile – sethvargo

2

avviene automaticamente se eseguito in modalità di produzione - non c'è bisogno che lo fai manualmente.

2

Dai un'occhiata a this post per reindirizzare tutte le richieste che causano un errore di instradamento.

Problemi correlati