Использование Sinatra и MongoDB - какой рекомендуемый способ "сохранить" соединение mongodb между HTTP-запросами?

Я использовал ASP.NET, и теперь я работаю над приложением Sinatra/MongoDB. В архитектуре ASP.NET соединение с базой данных, используемой данным запросом, происходит из пула соединений, которым управляет ADO.NET. Соединения сохраняются в пуле между запросами, так что стоимость создания и разрыва соединения не оплачивается для каждого HTTP-запроса.

Есть ли аналогичный механизм в приложении Sinatra MongoDB, или мне нужно будет подключиться/отключиться с каждым запросом? Если есть механизм, как выглядит код?

EDIT1: НЕ работает. Каждый HTTP-запрос, отправляемый браузером, попадает в строку new.db, включая запросы на css, js, jpeg файлы.

require 'mongo'
include Mongo

db = Mongo::Connection.new.db("MyDb")

class MyApp < Sinatra::Base
    get '/' do
       etc

Ответ 1

В новейшей версии ruby ​​mongodb driver включен пул соединений. Вы можете настроить свой пул в своем блоке configure в своем приложении-синатре и Бобу дяде.

Ответ 2

Если вы создаете соединение с базой данных вне сферы применения методов запроса, соединение не будет восстановлено при каждом запросе.

Вы можете попробовать использовать глобальную переменную или экземпляр при инициализации db.

# Should be in a configure block
configure do
  DB = Connection.new.db('test-sinatra')
end

Кроме того, объединение пулов не является проблемой здесь и, конечно же, не является решением этой конкретной проблемы.