2009-11-20 26 views
11

我已經使用了ASP.NET,現在我正在開發Sinatra/MongoDB應用程序。在ASP.NET架構中,給定請求的數據庫連接來自ADO.NET管理的連接池。連接在請求之間的池中保持活動狀態,以便每個http請求都不支付建立和拆除連接的成本。使用Sinatra和MongoDB - 「保持活躍」http請求之間的mongodb連接的建議方法是什麼?

在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 
+0

這是一個使用Sinatra和MongoDB的相當不錯的[示例應用](http://github.com/dancroak/shorty) - 可能會從查看代碼中獲得良好的開端。 – mdirolf

+0

當我做你所做的事情並查看mongod的輸出時,我看到每個HTTP請求都有連接,包括對css,js文件的請求。 –

回答

8

ruby mongodb driver的最新版本包括連接池。您可以在您的sinatra應用程序的configure區塊中設置您的游泳池,並且Bob的叔叔。

6

如果您在請求方法範圍之外創建數據庫連接,則在每次請求時連接都不會重新實例化。

您可能想要在初始化數據庫時嘗試使用全局變量或實例變量。

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

此外,連接池是不是這裏的問題,肯定是不解決這個特殊的問題。

+0

我想我正在做你的建議,但它不像你說的那樣行事。 –

+0

請參閱我的問題中的「EDIT1」,作爲不起作用的示例。 –

相關問題