我需要释放/关闭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
我错过了什么?
最佳答案
来自未来的注意:虽然这在当时可能是真的,但moped已经不再积极开发,mongoclient上的前moped开发人员和mongoclient开发人员都now working actively。
我强烈建议使用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。