Ich habe eine einfache Sinatra-Pause und es fällt mir schwer, einen Fehler einzufangen. Ich gebe auch zu, dass ich Ruby und Sinatra ziemlich neu bin.
Wenn ich einen post-Endpunkt erstelle und einen Fehler mache, möchte ich das eingehende Dokument melden. Ich muss entweder 1) den Fehler innerhalb des Post-Ergebnisses behandeln (wo ich Zugang zu @incoming habe) oder 2) das eingehende Dokument dem Fehler übergeben und es dort melden.
Was ist eine bessere Option, Option 1 oder Option 2?
Unten ist ein Beispiel meines Codes:
%Vor%Wenn ich bei Option 1 bleibe, wie verhindere ich Fehler beim Abholen der Fehler (wie es jetzt scheint)
Laut den Dokumenten:
Der Fehlerhandler wird jedes Mal aufgerufen, wenn eine Ausnahme von a ausgelöst wird Routenblock ...
Dies gilt jedoch nur für nicht abgefangene Ausnahmen. Versuchen Sie Folgendes:
%Vor%Versuchen Sie es dann:
%Vor%Außerdem können Sie den Error-Handler so anpassen, dass nur bestimmte Ausnahmen abgefangen werden, wodurch einige Ausnahmen vermieden werden, z. B.
%Vor%oder
%Vor%oder
%Vor%Aber für den Fang alle Version:
%Vor%Sie können die Ausführung nicht stoppen, wenn eine nicht abgefangene Ausnahme in einem Routenblock auftritt ... außer:
Die Fehlerhandler werden nur aufgerufen, wenn beide Sinatra : raise_errors und : show_exceptions Konfigurationsoptionen wurden festgelegt zu falsch ...
: raise_errors ist standardmäßig auf "true" in der Umgebung "test" und auf "false" gesetzt in anderen Umgebungen.
: show_exceptions Wert ist standardmäßig auf true festgelegt "Entwicklungsumgebung" und "falsch" in anderen Umgebungen
Der Autor von Sintra hat gesagt: "Dieses [Verhalten] ist vorsätzlich. Die Idee ist, dass Fehlerblöcke das Problem und Sie verbergen normalerweise nicht im Entwicklungsmodus.
Wenn ich zu Option 2 gehe, wie übergebe ich eingehende Fehler?
Eine @ Variable, die innerhalb eines Routenblocks erstellt wird, kann innerhalb eines Fehlerblocks gesehen werden. Versuchen Sie Folgendes:
%Vor% Nachdem Sie die URL http://localhost:4567
in Ihrem Browser eingegeben haben, sollten Sie "Hallo Welt" auf der zurückgegebenen Webseite sehen.
Der Grund dafür ist, dass eine @ Variable sich an jedes Objekt anfügt, das zu dem Zeitpunkt, zu dem die @ Variable erstellt wird, selbst ist; Wenn eine Variable aufgerufen wird, wird sie von dem Objekt, das zu diesem Zeitpunkt selbst ist, abgerufen. Wenn Sinatra entweder den Routenblock oder den Fehlerblock ausführt, setzt es sich selbst auf dasselbe Objekt.
Option 2 scheint nett zu sein, da sie den Fehlerbehandlungscode vom Anwendungscode trennt.
Tags und Links ruby error-handling sinatra