2

我是否需要在 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

我在这里想念什么?

4

1 回答 1

1

未来注意事项:虽然当时可能确实如此,但 Moped 不再积极开发,以前的 Moped 开发人员和 MongoClient 开发人员现在都在积极开发 MongoClient。


我强烈建议使用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。

于 2013-08-08T07:08:10.323 回答