2016-06-27 7 views
0

Ich möchte alle RoR-Ausnahmen in der REST-API-Anwendung mit 'rescue_from' abfangen.Wie fangen Sie die Basisausnahmeklasse in Ruby on Rails?

rescue_from StandardError do |exception| 
    message = Rails.env.production? ? 'API server error' : exception.message 
    render json: {status: "Error", message: message}, status: :internal_server_error 
end 

aber es fängt zu viele irrelevante Ausnahmen. Kann ich nur RoR-Ausnahmen erfassen? Ist es überhaupt eine gute Übung? Wenn nicht, was können Sie sonst noch empfehlen?

+0

Was meinen Sie mit "RoR Ausnahmen". Ist 'ZeroDivision', geworfen von dem Controller/Modell, das irrtümlicherweise versucht hat, den Durchschnitt für die Anzahl von Null zu berechnen," der RoR one "? – mudasobwa

+0

@mudasobwa: zum Beispiel, Routing-Fehler, fehlende Parameter, Datensatz nicht gefunden usw. – Romiras

+0

Wie auf der Erde 'RecordNotFound' ist Rails-spezifisch? Es könnte eine Anwendung geben, die die Datenbank (und 'ActiveRecord') komplett neben Rails verwendet. Für Routing-Fehler siehe ['ActionControllerError'] (https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_controller/metal/exceptions.rb). Übrigens, was hast du mit anderen Ausnahmen zu tun? Lass deine Bewerbung einfach sterben? – mudasobwa

Antwort

0

Nun, Sie können immer ausgehen und eine erschöpfende Liste aller Rails Ausnahmen erhalten, aber ehrlich gesagt sollte Ihr erster Schritt sein, zu entscheiden, welche Situationen Sie retten wollen und welche Sie sich katastrophal verhalten wollen. Nicht alle Ausnahmen sollten abgefangen werden.

Wenn Sie alle Rails-Exceptions abfangen möchten, sollten Sie sich die api-Dokumentation für die Version der Schienen ansehen, auf der Sie sich befinden, und die Basisklassen für die Ausnahmen finden, die Ihnen wichtig sind. Zum Beispiel, wenn Sie hoffen, nur alle ActiveRecord diejenigen zu fangen, können Sie von der Basis ActiveRecord::ActiveRecordError Klasse retten.

Noch einmal, ich würde betonen, dass Sie sich aus der anderen Richtung nähern sollten - nicht alles retten und dann versuchen, es auszudünnen, sondern indem Sie das Nötigste retten und nach Bedarf hinzufügen.