2013-08-09 3 views
1

키/값 저장소 인 새벽 라이브러리를 사용하고 있습니다.데이터베이스를 닫을 수있는보다 효율적인 방법이 있습니까?

는 나는이 어떤 작업을 수행 할 수 엽니 다 그런

db = Daybreak::DB.new $ShowDatabaseName 

내가 무엇이든 내가 원하는 않는 한 다음이 그것을 닫습니다

db.close 

그것은 사방이에 낭비 노력처럼 보인다 그러나 나는 그것을 사용하고 싶다. 다음과 같이 초기화에서 클래스 변수로 선언하는 것이 더 효율적있을 것 같습니다 :

def initialize 

    @db = Daybreak::DB.new $ShowDatabaseName 

end 

그것은 내 클래스의 나머지는 초기화하고 각 시간을 닫지 않고 사용할 수 있다는 것을 의미합니다,하지만 난을 얻을 메시지 읽기 :

Daybreak database was not closed, state might be inconsistent 

반복과 경고를 모두 처리하는 더 좋은 방법이 있습니까?

+0

당신이 새벽을 사용하는 것 :

DB = Daybreak::DB.new $ShowDatabaseName 

그리고 다른 곳에 프로그램에서 (어디)가 at_exit 블록을 넣어 ? 키 - 값 쌍을 저장하는 용도로만 사용되는 경우 해시가 해당 작업을 수행 할 수 있습니까? 그것을 데이터베이스와 상호 작용하는 경우 sqlite3을 대신 사용해보십시오. – tigeravatar

+1

프로그램 실행이 끝난 후 키 - 값 쌍을 저장합니다. 키 - 값 쌍이 다시 열릴 때 저장됩니다. – Andrew

답변

4

를 사용하여 블록 : 당신은 (일종의) 데이터베이스 연결이 프로그램이 완료되면 닫혀 있는지 확인하려면

def use_db(database_name) 
    db = Daybreak::DB.new(database_name) 
    yield db 
ensure 
    db.close 
end 

use_db($ShowDatabaseName) do |db| 
    # do something with db 
end 
2

, at_exit 블록을 사용합니다. 그래서, 상수로 연결을 저장 (당신의 변수는 인스턴스 변수입니다) :

at_exit { 
    DB.close 
} 
+0

파일 끝 부분에'at_exit' 블록을 붙입니다. 그것들을 맨 위에 놓는 것보다 더 합리적인 것처럼 보입니다. –

관련 문제