【问题标题】:How do I create a global connection object to mongodb in Sinatra?如何在 Sinatra 中创建到 mongodb 的全局连接对象?
【发布时间】:2011-05-13 07:19:20
【问题描述】:

使用 ruby​​ mongodb 驱动程序,有没有办法可以在配置块中创建一个可以在路由方法中访问的连接对象,这样我就不必在每个请求上重新创建连接?

【问题讨论】:

    标签: ruby mongodb sinatra


    【解决方案1】:

    在配置块中设置一个全局变量:

    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 fork之后重新连接到数据库,以便子进程拥有自己的连接。不这样做会给你带来非常奇怪的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      • 2015-01-15
      相关资源
      最近更新 更多