2010-07-14 153 views
3

我的rails應用程序使用DataMapper生成大量的小型sqlite數據庫。數據保存後,.sqlite文件必須上傳到遠程服務器並在本地銷燬。關閉DataMapper數據庫連接

我的問題是如何使DataMapper關閉.sqlite數據庫連接和免費回購的內存?應用程序應該生成許多數據庫,所以保存服務器資源非常重要。

只有這樣,我用Google搜索是 DataObjects::Pooling.pools.each do {|pool| pool.dispose} 這是完全不能接受的對我來說我想是因爲它似乎是關閉所有的DataMapper連接,但是由於幾個數據庫可以並行的線程中產生,我想摧毀的DataMapper的倉庫了。

對不起,我的英文。

回答

0

我不知道有這樣做的好方法。這個討論是相關的,但是:

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

顯然,有可能重新使用DataMapper.setup()的連接,但似乎連接的關閉自動處理。

不過,也許這些意見將幫助:

這是可能的存儲適配器,例如參考

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

查看此對象顯示,存儲路徑,這意味着它是針對特定的連接,而不是一般SQLite的適配器,或如:

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> 

據推測,這可以在某種程度上被標記爲垃圾收集什麼的(只是簡單地將它設置爲nil工作?)。

DataMapper::Adapters::DataObjectsAdapter中還有一個close_connection()方法,但它是受保護的,我不確定是否或如何使用此方法。

希望這提供了一些指針!

2

另外,DataMapper::Repository.adapters是當前Repository對象的散列。你可能可以在那裏挖掘以獲得連接。