2009-11-20 1 views
11

私はASP.NETを使用しましたが、今はSinatra/MongoDBアプリケーションで作業しています。 ASP.NETアーキテクチャでは、特定の要求が使用するデータベースへの接続は、ADO.NETが管理する接続プールから発生します。接続はリクエスト間でプール内に保持され、各httpリクエストに対して接続を構築し切断するコストは支払われません。SinatraとMongoDBの使用 - httpリクエスト間のmongodb接続を「生き続ける」ための推奨方法は何ですか?

Sinatra MongoDBアプリにも同様のメカニズムがありますか、またはリクエストごとに接続/切断する必要がありますか?メカニズムがある場合、コードはどのように見えますか?

EDIT1:次のコードは機能しません。ブラウザが送信する各HTTP要求は、css、js、jpegファイルの要求を含むnew.db行にヒットします。

require 'mongo' 
include Mongo 

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

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

SinatraとMongoDBを使用したかなり良い[example app](http://github.com/dancroak/shorty)です。おそらく、そのコードを見ることで良いスタートを得ることができます。 – mdirolf

+0

あなたがしてmongodの出力を見ると、css、jsファイルのリクエストを含む各HTTPリクエストに対して接続が行われていることがわかります。 –

答えて

8

ruby mongodb driverの最新バージョンには接続プーリングが含まれています。あなたはsinatraアプリのブロックconfigureにプールを設定し、Bobさんはあなたの叔父さんのプールを設定できます。

6

リクエストメソッドのスコープ外でデータベース接続を作成すると、リクエストごとに接続が再インスタンス化されません。

dbを初期化するときに、グローバル変数またはインスタンス変数を使用してみてください。

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

また、接続プールは問題ではなく、確かにこの特定の問題の解決策ではありません。

+0

私はあなたの提案をしていると思いますが、あなたが言うように行動していません。 –

+0

"EDIT1"私の質問では、何が動作していないの例として参照してください。 –

関連する問題