2013-03-04 3 views
1

Ruby를 배우고 있습니다. mysql gem을 사용하여 MySQL 데이터베이스에 연결하려고합니다. 내 관심사 중 하나는 연결 종료입니다.Ruby에서 데이터베이스 연결을 종료하는 방법은 무엇입니까?

예외 발생과 같은 예기치 않은 상황에서 연결을 종료하려면 어떻게해야합니까?

+0

'시작'/'구조'/'보장'(일명'시도'/'잡기'/'마지막')이 그렇습니다. –

답변

1

말은 이렇습니다.

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

BTW, 주석은 "이 블록은 항상 실행됩니다."라고 읽어야합니다. 일단 db.close를 실행하기 전에 다른 스레드가 'raise'또는'kill '을 보내면 db.close를 실행하기 전에 연결이 누출 될 수 있습니다. stdlib의 ['Timeout :: timeout'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/timeout/rdoc/Timeout.html#method-c-timeout)은 본질적으로 안전하지 않은 스레드 경주의 비즈니스를 할 수 있습니다. – dbenhur

+0

@ dbenhur : 흥미롭고, 조사해야합니다. –

+0

Charles Nutter는 [Thread # raise]와 친구들의 고유 한 hinkiness를 자세히 설명합니다 : [Ruby의 Thread # raise, Thread # kill, timeout.rb 및 net/protocol.rb 라이브러리가 깨졌습니다] (http : //blog.headius .com/2008/02/ruby-threadraise-threadkill-timeoutrb.html) – dbenhur

관련 문제