ruby - 如何在 Sinatra 中创建到 mongodb 的全局连接对象?

标签 ruby mongodb sinatra

使用 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/

相关文章:

ruby - 在 hpricot/nokogiri 中搜索 h2 元素之前的所有元素

ruby - 如何在 Sinatra 中混合路由以获得更好的结构

ruby - Gem::InstallError: nokogiri 要求 Ruby 版本 >= 1.9.2

ruby - 使用 Ruby Sinatra 显示 .txt 文件

html - 未定义 `errors'的方法:NilClass, intermediate html file

ruby-on-rails - Rails CSV 导入格式奇怪

ruby-on-rails - 原始 SQL 请求中的 Rails 4 字符串插值

mongodb - 如何在 MongoDB 3.4.0 中使用 $graphLookup 创建 View ?

node.js - Mongodb重复键错误。如何从错误对象中获取错误字段作为对象?

javascript - 在 Mongoose 中使用 Virtual 来返回查询的全名