使用Sinatra和MongoDB-关闭连接?

时间:2013-07-31 16:52:09

标签: ruby mongodb sinatra connection-pooling

我是否需要在Ruby和Sinatra中释放/关闭池化的mongodb连接?我看了http://api.mongodb.org/ruby/current/#Connection_Pooling,但没有看到任何特定内容。

然而,我偶尔会在相对较低的流量应用中遇到此错误:

  

冒烟测试块中的错误无法在10秒内获得连接。最大池大小目前为10;考虑增加池大小或超时:[“/var/lib/gems/1.9.1/gems/mongo-1.9.1/lib/mongo/util/pool.rb:274:in”block in checkout'“,

我目前使用配置块来设置连接:

configure do
 #Reading the file
 ini = IniFile.new(:filename=>file_name,:parameter => '=')
    section = ini['server']
 env = section['environment']
 mongoip = section['mongo_host']
 mongo_port = section['mongo_port']
 $environment = section['environment']

 begin
   $mongo_client =  MongoClient.new(mongoip, mongo_port, :pool_size => 10, :pool_timeout => 10,:connect_timeout =>10)
 rescue Exception => e
   "Error connecting to the database"
 end
end

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

来自未来的注意事项:虽然当时情况可能如此,但是Moped不再在MongoClient上开发,而且前Moped开发人员和MongoClient开发人员now working actively也不再开发。 / p>


我强烈建议使用Moped而不是MongoClient(它真的很老,并且有很多依赖项)。

Moped自动处理连接池,超时,重新连接并且非常智能。您可以在https://github.com/mongoid/moped/blob/master/lib/moped/connection/pool.rb

找到有关连接池的详细信息

Moped是一个没有依赖关系的独立gem,是MongoDB的纯Ruby驱动程序。 http://mongoid.org/en/moped/

在您使用它时,请使用Origin另一个独立的gem,它为MongoDB查询提供了出色的DSL。