2009-11-20 12 views
11

He usado ASP.NET y ahora estoy trabajando en una aplicación Sinatra/MongoDB. Con la arquitectura ASP.NET, la conexión a la base de datos que usa una solicitud determinada proviene de un grupo de conexiones que administra ADO.NET. Las conexiones se mantienen activas en el grupo entre las solicitudes, de modo que el costo de construir y destruir la conexión no se paga por cada solicitud http.Usando Sinatra y MongoDB: ¿cuál es la forma recomendada de "mantener viva" la conexión mongodb entre las solicitudes http?

¿Hay un mecanismo similar en una aplicación Sinatra MongoDB, o tendré que conectarme/desconectarme con cada solicitud? Si hay un mecanismo, ¿cómo se ve el código?

EDIT1: Lo siguiente NO funciona. Cada solicitud HTTP que el navegador envía coincide con la línea new.db, incluidas las solicitudes de archivos css, js, jpeg.

require 'mongo' 
include Mongo 

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

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

Aquí hay una buena [aplicación de ejemplo] (http://github.com/dancroak/shorty) usando Sinatra y MongoDB: probablemente pueda empezar bien mirando ese código. – mdirolf

+0

Cuando hago lo que haces y miro la salida de mongod, veo que se realizan conexiones para cada solicitud HTTP, incluidas las solicitudes de archivos css, js. –

Respuesta

8

La versión más reciente de ruby mongodb driver incluye la agrupación de conexiones. Puede configurar su grupo en su bloque configure en su aplicación sinatra y Bob es su tío.

6

Si crea su conexión de base de datos fuera del alcance de los métodos de solicitud, la conexión no se restituirá en cada solicitud.

Es posible que desee probar el uso de una variable global o de instancia al inicializar la base de datos.

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

Además, la agrupación de conexiones no es el problema aquí, y ciertamente no es la solución a este problema en particular.

+0

Creo que estoy haciendo lo que sugieres, pero no se está comportando como dices. –

+0

Consulte "EDIT1" en mi pregunta como un ejemplo de lo que NO funciona. –

Cuestiones relacionadas