2010-11-11 8 views
31

Voglio testare le 500 pagine di errore nella mia app Rails usando l'ambiente di sviluppo.Come testare 500.html nello sviluppo di rails env?

Ho già provato questo in config/environments/development.rb:

config.action_controller.consider_all_requests_local = false 

Ma questo non sembra avere alcun effetto.

+1

Sarebbe cambiare il vostro ambiente di aiuto di produzione? – Nuby

+0

Personalmente penso che sia meglio passare all'env di produzione per testare le pagine di errore. Se disattivi sempre le pagine di errori incorporate di Rails durante lo sviluppo, potresti rendere più difficile vedere preziose informazioni di debug. –

risposta

8

È possibile:

  1. accesso all'applicazione utilizzando l'indirizzo diverso da localhost o 127.0.0.1 che rotaie considera per default per essere richieste locali
  2. Override local_request? in application_controller.rb a qualcosa di simile:
def local_request? 
    false 
end 

Il secondo interromperà le richieste di tratta da localhost e 127.0.0.1 come richieste locali che combinate con consider_all_requests_local = false dovrebbero mostrare la tua pagina 500.html.

+0

'local_request?' È deprecato in Rails 3 e successivi: http://apidock.com/ rotaie/ActionController/Rescue/local_request% 3F – James

+13

Per chi proviene da Google e utilizza Rails 3, guarda alla risposta successiva. – corbin

0

penso che l'impostazione corretta per girarsi è questo:

config.action_view.debug_rjs = false 

Perché è ancora etichettato rjs non è del tutto chiaro.

+0

Ora ho entrambi impostato su false e non funziona ancora ... – tbk

+0

questo non ha alcun effetto per me sia – u2622

54

L'unico modo che ho trovato per fare questo finora è di mettere in development.rb

config.consider_all_requests_local = false

quindi accedere alla URL utilizzando il mio indirizzo IP locale: http://192.168.1.135:3000/blah

Le altre impostazioni citati don sembra avere alcun effetto

+0

Ci sono così tante risposte a riguardo su StackOverflow. Questo è di gran lunga l'approccio più semplice. Grazie! – Eric

+2

Funziona anche in Rails 4. BTW, funziona anche con 127.0.0.1:3000/page_which_does_not_exist o localhost: 3000/page_which_does_not_exist – Ben

+0

Non funziona per me. Non ricevo corrispondenze di percorso invece di errore interno del server. – okysabeni

22

Nessuna delle soluzioni proposte ha funzionato nella mia app Rails 3. La soluzione rapida e sporca per me consisteva semplicemente nel colpire le pagine di errore direttamente per vedere l'HTML reso. Ad esempio,

http://0.0.0.0:3000/404.html 

http://0.0.0.0:3000/500.html 
+0

Questa dovrebbe essere la risposta. È la soluzione più semplice !!! – pratski

+0

Non funziona per me. Sto ricevendo la pagina di errore 500 ma sto vedendo che viene registrato dal server rails o il log di sviluppo. – okysabeni

3

si dovrebbe aggiungere le righe riportate di seguito per l'application_controller,

unless ActionController::Base.consider_all_requests_local 
    rescue_from Exception, :with => :render_500 
    if ActiveRecord::RecordNotFound 
     rescue_from Exception, :with => :render_404 
    end 
    rescue_from ActionController::RoutingError, :with => :render_404 
    rescue_from ActionController::UnknownController, :with => :render_404 
    rescue_from ActionController::UnknownAction, :with => :render_404 
end 

Poi provare a eseguire con le seguenti impostazioni.

config.action_controller.consider_all_requests_local = false in config/ambienti/development.rb:

che funzionerà. Non dimenticare di scrivere la funzione in application_controller.rb per eseguire il rendering del layout per ciascuno dei messaggi di errore.

+0

Si potrebbe anche usare semplicemente la direttiva 'rescue_from' nella parte superiore del controller, come in http://guides.rubyonrails.org/action_controller_overview.html#the-default-500-and-404-templates – dooleyo

+0

ActionController :: UnknownAction non esiste più – webdevguy

15

Basta fare un http://localhost:3000/404 o/500 per accedere a queste pagine e vedere come sono.

+2

Questa è la risposta più breve e migliore per qualcuno che vuole solo testare il design per quelle pagine –

+0

Sono d'accordo con te. –

1

Oltre all'impostazione: config.consider_all_requests_local = false Ho anche bisogno di impostare: config.action_dispatch.show_exceptions = true

0

se si desidera solo per forzare un errore 500 per vedere quello che sembra, si può semplicemente aggiungere questo per una visione:

esempio

Haml:

= render :partial => "broken", :status => 500 
+1

Aggiungi una spiegazione con una risposta per come questa risposta aiuta l'OP a risolvere il problema attuale –