2016-07-13 8 views
1

Ich verwende die Rack-timeout gem und eine Rack :: Timeout :: RequestTimeoutException auftritt. Ich habe keine Konfiguration vorgenommen, um dieses Juwel in meine Edelsteindatei zu legen.Handling Rack Timeout Ausnahmen

Wie gehe ich mit diesen Ausnahmen um, damit sie nicht die normale App-Prozedur stoppen, sondern nur loggen und mich darüber informieren?

Antwort

1

Der ganze Zweck dieses Juwel ist Ausnahmen nach einem Timeout

zu erhöhen „Abbruch-Anforderungen, die zu lange einnehmen, wird eine Ausnahme ausgelöst.“

Wenn das nicht das ist, was Sie tun möchten, sollten Sie dieses besondere Juwel vielleicht nicht benutzen? Zufällige google Hit https://github.com/moove-it/rack-slow-log

+0

Ich dachte, dass der Zweck des Edelsteins darin bestand, Ausnahmen zu fangen und zu erhöhen, damit ich erkennen kann, wo lange Prozesse stattfinden und damit ich auf eine andere Weise damit umgehen kann. Vielleicht irre ich mich? –

1

Sie können die Ausnahme in der Anwendung fangen mit

# in your app/controllers/application_controller.rb 
rescue_from Rack::Timeout::RequestTimeoutException do |exception| 
    # do something 
end 

Aber wie es eine Ausnahme ist glaube ich nicht, es möglich ist, die Ausführung zurückzukehren, wo sie unterbrochen wurde.

jedoch Timeout fällt auch eine Log-Nachricht alle 1 Sekunde wie folgt aus:

source=rack-timeout id=1123e70d486cbca9796077dc96279126 timeout=20000ms 
service=1018ms state=active 

Vielleicht könnten Sie das Intervall von diesen erhöhen, sagen wir 5 Sekunden und das Timeout auf so etwas wie 120 Sekunden hoch ändern, auf diese Weise ist es unwahrscheinlich, dass irgendetwas tatsächlich unterbrochen wird, aber Sie erhalten Protokollmeldungen, um Ihnen zu sagen, dass etwas lange läuft.