有没有更有效的方法来确保我的数据库关闭?

时间:2013-08-09 21:58:06

标签: ruby

我正在使用Daybreak库,这是一个键/值存储。

我打开它以执行任何操作:

db = Daybreak::DB.new $ShowDatabaseName

然后我做任何我想做的事,然后用它关闭它:

db.close

这似乎是我想要使用它的任何地方浪费的努力。在初始化中将它声明为类变量似乎更有效:

def initialize

    @db = Daybreak::DB.new $ShowDatabaseName

end

这意味着我的课程的其余部分可以使用它而不必每次都初始化和关闭它,但后来我收到一条消息:

Daybreak database was not closed, state might be inconsistent

有没有更好的方法来处理重复和警告?

2 个答案:

答案 0 :(得分:4)

使用块:

def use_db(database_name)
  db = Daybreak::DB.new(database_name)
  yield db
ensure 
  db.close
end

use_db($ShowDatabaseName) do |db|
  # do something with db
end

答案 1 :(得分:2)

如果您希望(某种程度上)确保在程序完成时关闭数据库连接,请使用at_exit块。因此,将您的连接存储为常量(您的变量是实例变量):

DB = Daybreak::DB.new $ShowDatabaseName

程序中的其他地方(任何地方)放置at_exit块:

at_exit {
  DB.close
}