Sto usando rails-api per creare un'API senza interfaccia web. Quando ricevo errori nello sviluppo, mi piacerebbe vedere solo il messaggio di errore e lo stacktrace in testo normale senza tutto il wrapping HTML. Come sovrascrivere la gestione globale delle eccezioni in modo da rendere lo stacktrace in modalità di sviluppo in testo semplice/JSON e un messaggio di errore generico in produzione?Come ottengo delle eccezioni per il rendering di una versione in chiaro della pagina degli errori di sviluppo di Rails?
8
A
risposta
3
Suggerirei che includere l'analisi dello stack nel codice di produzione non è probabilmente una buona idea dal punto di vista della sicurezza.
Ecco come lo farei:
render :json => {message:exception.message, stack_trace: exception.stacktrace}
Spero che questo aiuta.
Dopo la chiarificazione di Sam posso aggiungere:
Nel vostro controller di base per il vostro API (probabilmente ApplicationController):
class ApplicationController < ActionController::Base
...
rescue_from Exception do |exception|
error = {message:exception.message}
error[:stack_trace] = exception.stacktrace if Rails.env.development?
render :json => error
end
...
end
Caveat: Non si può decidere di salvare da ogni singola eccezione in questo modo, ma questo è come lo faresti se lo facessi.
2
alcuni miglioramenti rispetto risposta @donleyp per ottenere una traccia pulita in Rails 3.2 e uscita generica informazioni di errore nella produzione:
class ApplicationController < ActionController::API
...
rescue_from Exception do |exception|
if Rails.env.development?
error = {message:exception.message}
error[:application_trace] = Rails.backtrace_cleaner.clean(exception.backtrace)
error[:full_trace] = exception.backtrace
render :json => error
else
render :text => "Internal server error.", :status => 500
end
end
...
end
Problemi correlati
- 1. Rails pagina di errore amichevole in sviluppo
- 2. Ogni pagina html con doctype necessita di una connessione Internet per il rendering della pagina correttamente?
- 3. Gestione delle eccezioni ed errori DateTime PHP
- 4. Asp.net 4.0: come ottenere i dettagli delle eccezioni nella pagina degli errori personalizzati?
- 5. Tempo di rendering della pagina in MVC
- 6. Descrivi il processo di rendering della pagina in un browser?
- 7. Come ottengo il numero di versione da una libreria statica?
- 8. Come ottengo una versione in grassetto di prefferedFontTextDtyle di UIFont?
- 9. Come ottengo la versione di jQuery-UI?
- 10. Rails 3 - errori di sviluppo in modalità produzione
- 11. Distribuzione di una versione di sviluppo di un'applicazione iPhone
- 12. Come configurare la gemma Airbrake per registrare tutte le eccezioni di Rails negli ambienti di sviluppo e di produzione?
- 13. Strategie di gestione delle eccezioni WCF
- 14. Qual è il flusso di lavoro per lo sviluppo di una pagina Web per Kik Messenger
- 15. Come eseguire il debug degli errori di deserializzazione in .NET?
- 16. Metodologia di gestione degli errori
- 17. rendering in contesto di sviluppo web
- 18. Errori di mixaggio ed eccezioni in C#
- 19. Quando il controllo degli errori è eccessivo?
- 20. Confronto degli strumenti di sviluppo della GUI per linux
- 21. Il server di sviluppo delle rotaie è lento e richiede molto tempo per caricare una pagina semplice
- 22. Paraview: modifica delle proporzioni degli assi nella finestra di rendering
- 23. Una tecnica di classe base per la gestione delle eccezioni
- 24. Rails Minified (Compiled) Risorse in modalità di sviluppo
- 25. Come ottenere l'elenco degli errori generati da una funzione?
- 26. Come specificare quale versione degli strumenti di sviluppo di Android in Maven
- 27. C'è una barra degli strumenti di sviluppo migliore per IE8?
- 28. Rails: eliminazione degli errori di convalida generici "X non valido"
- 29. Uso degli helper di Rails per eseguire il rendering dei partial
- 30. Come ottengo una versione precedente di un file con libgit2sharp
vorrei chiarire la questione - che sto chiedendo modalità di sviluppo solo ... e come sovrascrivere la risposta a livello globale. –
Penso che 'stacktrace' sia un refuso e dovrebbe essere' backtrace'. – Jacob