2010-07-14 6 views
3

내 레일 어플리케이션은 DataMapper를 사용하여 많은 sqlite 데이터베이스를 생성합니다. 데이터를 저장 한 후 .sqlite 파일을 원격 서버에 업로드하고 로컬에서 삭제해야합니다.DataMapper DB 연결 닫기

제 질문은 .sqlite db 연결과 무료 repo의 메모리를 닫는 방법입니다. 응용 프로그램은 많은 데이터베이스를 생성해야하므로 서버 리소스를 저장하는 것이 중요합니다. 내가 봤

유일한 방법은 그러나 몇 가지 데이터베이스가 병렬 스레드에서 생성 할 수있는 모든 DataMapper 연결을 닫는 것으로 보인다 내가 너무 DataMapper의 저장소를 파괴하려는 때문에 내가 생각하는 나에게 완전히 받아 들일 수 DataObjects::Pooling.pools.each do {|pool| pool.dispose} 입니다.

영어로 죄송합니다.

답변

0

나는 이것을하는 좋은 방법을 모르고있다. 이 논의는 그러나 관련입니다 :

http://www.mail-archive.com/[email protected]/msg02894.html

분명히, DataMapper.setup()를 사용하여 연결을 다시 할 수 있지만, 연결의 폐쇄가 자동으로 처리됩니다 것으로 보인다.

그러나

, 어쩌면 이러한 관찰은 도움이 될 것입니다

은 어댑터, 예를 들어,에 대한 참조를 저장하는 것이 가능하다

p a 

#<DataMapper::Adapters::SqliteAdapter:0x00000001aa9258 @name=:default, @options={"scheme"=>"sqlite", "user"=>nil, "password"=>nil, "host"=>nil, "port"=>nil, "query"=>nil, "fragment"=>nil, "adapter"=>"sqlite3", "path"=>"db/development.sqlite3"}, @resource_naming_convention=DataMapper::NamingConventions::Resource::UnderscoredAndPluralized, @field_naming_convention=DataMapper::NamingConventions::Field::Underscored, @normalized_uri=sqlite3:db/development.sqlite3?scheme=sqlite&user=&password=&host=&port=&query=&fragment=&adapter=sqlite3&path=db/development.sqlite3> 

아마도이 든 표시 될 수있다 :이 오브젝트보기

a = DataMapper.setup(:default, "sqlite:db/development.sqlite3") 

것이 아니라 SQLite는 일반 어댑터, 또는보다 특정 연결의 암시 경로가 저장된 것을 보여준다 가비지 수집 또는 무언가를 위해 (단순히 그것을 nil 일로 설정하겠습니까?).

DataMapper::Adapters::DataObjectsAdapter에도 close_connection() 방법이 있지만 보호되어 있으며 사용할 수 있는지 여부와 확실하지 않습니다.

희망 사항은 다음과 같습니다.

2

또한 DataMapper::Repository.adapters은 현재 리포지토리 개체의 해시입니다. 연결을 유지하기 위해 주변을 파헤쳐 볼 수 있습니다.