2010-11-21 14 views
4

ruby​​ mongodbドライバを使用すると、各リクエストで接続を再作成する必要がないように、ルートメソッドでアクセスできるconfigureブロックに接続オブジェクトを作成する方法がありますか? settingsSinatraでmongodbへのグローバル接続オブジェクトを作成するにはどうすればよいですか?

configure do 
    $mongo = Mongo::Connection.new 
end 

またはそれをスティック:構成ブロックでグローバル変数を設定し

答えて

6

configure do 
    set :mongo, Mongo::Connection.new 
end 

get '/' do 
    # the connection is available through settings.mongo 
end 

を私はこれらのいずれもが非常にエレガント見つけると言わなければなりません。

開発時には、すべての要求に対して接続が作成されているように見えますが、本番環境でサーバーを起動すると、動作が異なる(たとえば、thin -e production)ことがわかります。また

、あなたのアプリが旅客の下で実行する場合、あなたはこれを実行する必要があります。

それは何
configure do 
    if defined?(PhusionPassenger) 
    PhusionPassenger.on_event(:starting_worker_process) do |forked| 
     if forked 
     # *** reconnect to the database here! *** 
     end 
    end 
    end 
end 

は、子プロセスは独自のコネクションを持っているように、それは、旅客フォーク後にデータベースに再接続することです。これをしないと、あなたは本当に奇妙なエラーになります。

関連する問題