2012-04-27 63 views
0

問題是關於radis-rb的寶石。沒有被救援塊捕獲的異常

這個異常沒有被我的救援塊攔截,我的應用程序停機。

我的代碼:

begin 
    redis = Redis.new 
    puts "WTF?" 
rescue Exception 
    puts "Exception" 
end 

如果redis下跌,消息WTF?被暴露。

它發生在有或沒有Exception語句的情況下。

爲什麼這個異常不會引發到我的救援區?

+0

請[永遠不要從例外中拯救](http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby)! – 2012-04-27 16:49:53

+0

@Andrew:雖然這是真的,但在這種情況下它並不是真的有用,因爲'Errno :: ECONNREFUSED'應該從'Exception'繼承(至少如果Gem不會取代它......)。當我從答案中讀到時,OP已經嘗試了一個簡單的'rescue':「它仍然是這樣,有/無Exception聲明。」 – 2012-04-27 16:50:25

+0

@NiklasB。我知道,但首先從它中解救出來並不是一個好主意(因此這是一條評論)。 – 2012-04-27 16:51:45

回答

1

我自己解決了這個問題(在社區和評論的幫助下)。

僅在IRB中發生異常。

其中一個原因是IRB的inspect在IRB嘗試打印Redis.new的結果時致電。

在腳本(不是IRB)中,不會發生異常,因爲Redis.newRedis服務關閉時不會引發異常。

question幫助解決我的問題。

+0

哦,這真的是糟糕的API設計。恭喜你弄明白了! – 2012-04-29 01:31:34