问题 使用Sinatra和MongoDB - 什么是“保持活跃”http请求之间的mongodb连接的推荐方法?


我使用过ASP.NET,现在我正在使用Sinatra / MongoDB应用程序。使用ASP.NET体系结构,给定请求使用的数据库连接来自ADO.NET管理的连接池。在请求之间,池中的连接保持活动状态,因此不会为每个http请求支付构建和拆除连接的成本。

Sinatra MongoDB应用程序中是否有类似的机制,或者我是否需要连接/断开每个请求?如果有机制,代码是什么样的?

编辑1:以下不起作用。浏览器发送的每个HTTP请求都会命中new.db行,包括对css,js,jpeg文件的请求。

require 'mongo'
include Mongo

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

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

9262
2017-11-20 17:43


起源

这是一个非常好的 示例应用 使用Sinatra和MongoDB - 从查看代码可能会有一个良好的开端。 - mdirolf
当我做你做的事情并查看mongod的输出时,我看到每个HTTP请求都有连接,包括对css,js文件的请求。 - Corey Trager


答案:


最新版本的 红宝石mongodb司机 包括连接池。你可以在你的游泳池中设置游泳池 configure 在你的sinatra应用程序阻止,鲍勃是你的叔叔。


8
2017-11-28 05:04





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

初始化db时,您可能希望尝试使用全局变量或实例变量。

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

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


6
2017-11-20 23:04



我想我正在做你的建议,但它不像你说的那样表现。 - Corey Trager
请参阅我的问题中的“EDIT1”作为不起作用的示例。 - Corey Trager