Закрытие соединения с БД DataMapper - PullRequest
3 голосов
/ 15 июля 2010

мое приложение rails генерирует множество небольших баз данных sqlite, используя DataMapper.После сохранения данных .sqlite-файл должен быть загружен на удаленный сервер и уничтожен локально.

Мой вопрос: как заставить DataMapper закрыть соединение .sqlite db и освободить память репо?Приложение должно генерировать много баз данных, поэтому важно экономить ресурсы сервера.

Единственный способ, которым я гуглил, это DataObjects::Pooling.pools.each do {|pool| pool.dispose}, что для меня совершенно неприемлемо, я думаю, потому что кажется, что оно закрывает все соединения DataMapper, однако немногие базы данныхгенерироваться в параллельных потоках, и я тоже хочу уничтожить репозиторий DataMapper.

Извините за мой английский.

Ответы [ 2 ]

2 голосов
/ 16 октября 2012

Также DataMapper::Repository.adapters - это хэш текущих объектов репозитория. Возможно, вам удастся покопаться там, чтобы добраться до соединений.

0 голосов
/ 14 июля 2011

Я не знаю ни одного хорошего способа сделать это. Это обсуждение уместно, однако:

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 работать?)

В DataMapper::Adapters::DataObjectsAdapter также есть метод close_connection(), но он защищен, и я не уверен, можно ли его использовать или как.

Надеюсь, что это дает некоторые указатели!

...