Ruby를 배우고 있습니다. mysql
gem을 사용하여 MySQL 데이터베이스에 연결하려고합니다. 내 관심사 중 하나는 연결 종료입니다.Ruby에서 데이터베이스 연결을 종료하는 방법은 무엇입니까?
예외 발생과 같은 예기치 않은 상황에서 연결을 종료하려면 어떻게해야합니까?
Ruby를 배우고 있습니다. mysql
gem을 사용하여 MySQL 데이터베이스에 연결하려고합니다. 내 관심사 중 하나는 연결 종료입니다.Ruby에서 데이터베이스 연결을 종료하는 방법은 무엇입니까?
예외 발생과 같은 예기치 않은 상황에서 연결을 종료하려면 어떻게해야합니까?
말은 이렇습니다.
begin
db = open_mysql_connection
# do stuff
ensure
# this block is always executed, even if exception is raised
db.close
end
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
@ dbenhur : 흥미롭고, 조사해야합니다. –
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
'시작'/'구조'/'보장'(일명'시도'/'잡기'/'마지막')이 그렇습니다. –