关闭DataMapper数据库连接

时间:2010-07-14 20:08:52

标签: ruby sqlite orm connection datamapper

我的rails应用程序使用DataMapper生成许多小型sqlite数据库。保存数据后,必须将.sqlite文件上载到远程服务器上并在本地销毁。

我的问题是如何使DataMapper关闭.sqlite db连接和免费repo的内存?应用程序应生成许多数据库,因此保存服务器资源非常重要。

我用Google搜索的方式是 DataObjects::Pooling.pools.each do {|pool| pool.dispose} 这对我来说是完全不可接受的,我认为因为它似乎关闭了所有DataMapper连接,但是并行线程中可以生成很少的数据库,我也想销毁DataMapper的存储库。

抱歉我的英文。

2 个答案:

答案 0 :(得分:2)

此外,DataMapper::Repository.adapters是当前Repository对象的哈希。你可以在那里挖掘以获得连接。

答案 1 :(得分:0)

我不知道有什么好办法。然而,这个讨论是恰当的:

http://www.mail-archive.com/datamapper@googlegroups.com/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工作?)。

close_connection()中还有DataMapper::Adapters::DataObjectsAdapter方法,但它受到保护,我不确定是否或如何使用此方法。

希望这能提供一些指示!