Ich verwende Rails-API, um eine API ohne Web-Schnittstelle zu erstellen. Wenn ich Fehler in der Entwicklung bekomme, würde ich gerne nur die Fehlermeldung und Stacktrace im Klartext sehen, ohne das ganze HTML-Wrapping. Wie überschreibe ich die globale Ausnahmebehandlung, sodass das Stacktrace im Entwicklungsmodus in Nur-Text/JSON gerendert wird, und eine generische Fehlermeldung in der Produktion?Wie erhalte ich Ausnahmen, um eine reine Textversion der Rails-Entwicklungsfehlerseite zu rendern?
Q
Wie erhalte ich Ausnahmen, um eine reine Textversion der Rails-Entwicklungsfehlerseite zu rendern?
8
A
Antwort
3
Ich würde vorschlagen, dass das Einschließen des Stack-Trace im Produktionscode aus Sicherheitsgründen wahrscheinlich keine gute Idee ist.
Hier ist, wie ich es tun würde:
render :json => {message:exception.message, stack_trace: exception.stacktrace}
Ich hoffe, das hilft.
Nach Sams Klärung kann ich hinzufügen:
In Ihren Basis-Controller für Ihre API (wahrscheinlich Application):
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: Sie können nicht von jeder einzelnen Ausnahme auf diese Weise retten wollen, aber So würdest du es tun, wenn du es tätest.
2
Einige Verbesserungen gegenüber @donleyp Antwort auf eine saubere Spur in Rails 3.2 und Ausgang allgemeine Fehlerinformationen in der Produktion erhalten:
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
ich die Frage klären soll - ich bin nur für Entwicklungsmodus zu fragen ... und Wie überschreibt man die Antwort global? –
Ich denke 'Stacktrace' ist ein Tippfehler und sollte' backtrace' sein. – Jacob