2010-07-14 130 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对象的散列。你可能可以在那里挖掘以获得连接。

相关问题