关闭DataMapper数据库连接

3
我的Rails应用程序使用DataMapper生成许多小的SQLite数据库。数据保存后,必须将.sqlite文件上传到远程服务器并在本地销毁。
我的问题是如何使DataMapper关闭.sqlite数据库连接并释放repo的内存?应用程序应该生成许多数据库,因此重要的是节省服务器资源。
我找到的唯一方法是 DataObjects :: Pooling.pools.each do {| pool | pool.dispose} 这对我来说完全不可接受,因为它似乎正在关闭所有DataMapper连接,但是可以在并行线程中生成少量数据库,而且我也想销毁DataMapper的存储库。
抱歉我的英语。
2个回答

2
此外,DataMapper::Repository.adapters 是当前存储库对象的哈希表。您可以在其中查找以获取连接。

0

我不知道有什么好的方法来做这件事。然而,这个讨论是相关的:

http://www.mail-archive.com/datamapper@googlegroups.com/msg02894.html

显然,使用DataMapper.setup()可能重新打开连接,但似乎关闭连接是自动处理的。

但是,也许这些观察结果会有所帮助:

可以存储适配器的引用,例如

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

查看此对象可知路径已存储,这意味着它是针对特定连接而非 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()方法,但它是受保护的,我不确定是否可以或如何使用它。

希望这些提供了一些指引!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接