簡體   English   中英

如何在Sinatra中為mongodb創建全局連接對象?

[英]How do I create a global connection object to mongodb in Sinatra?

使用ruby mongodb驅動程序,有沒有辦法在configure塊中創建一個可以在路由方法中訪問的連接對象,這樣我就不必在每個請求上重新創建連接?

在配置塊中設置全局變量:

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

或將其粘貼在settings

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

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

我必須說,我發現這些都不是很優雅。

在開發中看起來好像連接是在每個請求上創建的,但是在生產中啟動服務器並且您將看到它的行為不同(例如, thin -e production )。

此外,如果您的應用程序將在Passenger下運行,則需要執行以下操作:

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

它的作用是它在Passenger分支之后重新連接到數據庫,因此子進程有自己的連接。 不這樣做會給你帶來非常奇怪的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM