使用 ruby mongodb 驱动程序,有没有一种方法可以在 configure block 中创建一个可以在路由方法中访问的连接对象,这样我就不必在每次请求时都重新创建连接?
最佳答案
在配置 block 中设置一个全局变量:
configure do
$mongo = Mongo::Connection.new
end
或将其粘贴在设置
中:
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 fork 之后重新连接到数据库,这样子进程就有了自己的连接。不这样做会给你带来非常奇怪的错误。
关于ruby - 如何在 Sinatra 中创建到 mongodb 的全局连接对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4236618/