2013-03-04 87 views
1

我在學Ruby。我正在嘗試使用mysql gem與MySQL db建立連接。我擔心的一個問題是連接關閉。如何確保在Ruby中關閉數據庫連接?

我應該如何確保連接在意外情況下關閉,如拋出異常?

+0

這就是'開始'/'救援'/'確保'(又名'try' /'catch' /'finally')。 – 2013-03-04 05:12:51

回答

1

你的意思是,這樣的事情?

begin 
    db = open_mysql_connection 
    # do stuff 
ensure 
    # this block is always executed, even if exception is raised 
    db.close 
end 
+0

順便說一下,評論應該是「這個塊總是被執行」。如果另一個線程在您輸入確認後但在執行db.close之前發送了「raise」或「kill」,則連接可能會泄漏。 stdlib的['Timeout :: timeout'](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/timeout/rdoc/Timeout.html#method-c-timeout)僅僅使用這樣一種固有的不安全線程競賽來做生意。 – dbenhur 2013-03-04 05:56:58

+0

@dbenhur:有趣的,必須看看它。 – 2013-03-04 05:58:06

+0

Charles Nutter詳細描述了'Thread#raise'和朋友的固有詭計:[Ruby的Thread#raise,Thread#kill,timeout.rb和net/protocol.rb庫被破壞](http://blog.headius的.com/2008/02 /紅寶石threadraise-threadkill-timeoutrb.html) – dbenhur 2013-03-04 06:01:49

相關問題