我的rails应用程序使用DataMapper生成许多小型sqlite数据库。保存数据后,必须将.sqlite文件上载到远程服务器上并在本地销毁。
我的问题是如何使DataMapper关闭.sqlite db连接和免费repo的内存?应用程序应生成许多数据库,因此保存服务器资源非常重要。
我用Google搜索的方式是
DataObjects::Pooling.pools.each do {|pool| pool.dispose}
这对我来说是完全不可接受的,我认为因为它似乎关闭了所有DataMapper连接,但是并行线程中可以生成很少的数据库,我也想销毁DataMapper的存储库。
抱歉我的英文。
答案 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
方法,但它受到保护,我不确定是否或如何使用此方法。
希望这能提供一些指示!