[英]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.