2009-06-20 3 views
1

Ich habe einen Block wie so:Es sind sie nicht „Verlorene Verbindung zum MySQL-Server“ zu retten Fehler

begin 
     # some SQL request 
rescue Mysql::Error => e 
     logputs "Mysql::Error occurred, retrying in 10s: #{e.message}" 
     sleep 10 
     retry 
end 

Aber wenn eine „Verlorene Verbindung zum MySQL-Server“ Fehler aufgetreten ist, wird dieser Block war nicht in der Lage, es zu fangen und wiederholen (der MySQL-Server wurde neu gestartet). Irgendeine Idee, wie ich diese Ausnahme richtig erfassen kann?

Danke!

Antwort

0

Sind Sie sicher, dass Sie die richtige Art von Ausnahme retten?

Versuchen Sie, den folgenden Code:

rescue StandardError => e 
    puts e 

Das sollte Ausgang jede Ausnahme, die ausgelöst wird, und was noch wichtiger werden Sie in der Lage sein, die spezifische Art zu sehen. Dann können Sie Ihre Rettungserklärung genauer spezifizieren.

+0

Danke. Es sieht so aus, als würde ich den korrekten Typ retten, da dies der Fehler ist: /mnt/app/releases/20090620000135/vendor/rails/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb:212:in 'log ': Mysql :: Fehler: Verlorene Verbindung zum MySQL-Server während der Abfrage: ... (ActiveRecord :: StatementInvalid) – ambivalence

+0

FYI - Verwirrenderweise ist die Basisklasse der meisten ausgelösten Fehler keine Ausnahme, sondern StandardError. – BaroqueBobcat

+0

Sie haben Recht BarockBobcat. Ich habe den Code angepasst. – Phil

1

Aus Ihrem Kommentar sieht es so aus, als ob eine Mysql :: Error Ausnahme ausgelöst wird, aber dann von ActiveRecord abgefangen wird, die dann eine ActiveRecord :: StatementInvalid Ausnahme auslöst (was in diesem Fall nicht sehr hilfreich ist!).

Ich würde sagen, ändern Sie Ihre Rettung, um die AR :: StatementInvalid Ausnahme zu fangen und zu sehen, was das für Sie tut.

Verwandte Themen