Rails: переподключение к базе данных sqlite3 при изменении базового файла .sqlite3 - PullRequest
0 голосов
/ 23 февраля 2012

Ситуация:

У меня запущено приложение Rails 3.1.3, которое загружает базу данных sqlite3 и запрашивает ее. Стандартные вещи. Он работает внутри апача с пассажиром. Версии: sqlite3 (GEM / 1.3.5), ruby ​​1.9.3-p0, sqlite3 (libs / bin) 3.6.12

Проблема:

Файл sqlite3 загружается из каталога, который находится за пределами корня приложения Rails, и может обновляться с помощью отдельного (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 locked или prepare called on a closed database

Существует ли отказоустойчивый способ принудительного восстановления соединения с файлом, закрытия и повторного открытия всех файловых дескрипторов?

Спасибо, Frank

В качестве обозначения:

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 голосов
/ 28 февраля 2012

Чтобы ответить на мой вопрос:

ActiveRecord::Base.connection_pool.disconnect!

работает

Но он отключает все базы данных ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...