11

我使用过 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
4

2 回答 2

8

最新版本的ruby​​ mongodb 驱动程序包括连接池。您可以在您的 sinatra 应用程序的区块中设置您的游泳池,configure而 Bob 是您的叔叔。

于 2009-11-28T05:04:18.113 回答
6

如果您在请求方法范围之外创建数据库连接,则不会在每次请求时重新实例化连接。

您可能想在初始化数据库时尝试使用全局变量或实例变量。

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

此外,连接池不是这里的问题,当然也不是这个特定问题的解决方案。

于 2009-11-20T23:04:32.120 回答