Rails:当基础.sqlite3文件更改时重新连接到sqlite3 DB

时间:2012-02-23 10:37:40

标签: ruby-on-rails ruby activerecord sqlite

情况:

我正在运行一个Rails 3.1.3应用程序,它会加载一个sqlite3数据库并对其进行查询。标准的东西。 它在一个带有幻觉乘客的apache里面运行。 版本是sqlite3(GEM / 1.3.5),ruby 1.9.3-p0,sqlite3(libs / bin)3.6.12

问题:

sqlite3文件是从位于Rails App根目录之外的目录加载而可以通过单独的(SVN)进程更新

我想要做的是每五分钟重新加载一次文件(很容易)。 但是如何在Rails中五分钟后重新连接数据库(文件)?

我尝试了什么:

在my_model.rb中:

if time_to_reload
  self.connection.reconnect!
  self.establish_connection
end

if time_to_reload
  self.connection.disconnect!
  self.connection.reconnect!
end

我尝试了几乎所有的排列,到目前为止都没有成功。

我得到SQLite3::BusyException: database is lockedprepare called on a closed database

是否存在强制重新连接文件,关闭并重新打开所有文件句柄的故障保护方法?

谢谢, 弗兰克

作为旁注:

1.9.3-p0-perf :006 > MyModel.connection.disconnect!
 => #<SQLite3::Database:0x0000010474f220> 
1.9.3-p0-perf :007 > MyModel.connected?
 => true 
1.9.3-p0-perf :008 > WAT?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题:

ActiveRecord::Base.connection_pool.disconnect!

作品

但它断开了所有数据库......