【问题标题】:The proper way to close connection to mongodb from rails从rails关闭与mongodb的连接的正确方法
【发布时间】:2016-09-27 10:46:18
【问题描述】:

我使用 mongo 驱动程序 2.2.2 从我的 rails 应用程序连接。 我注意到我有太多打开的连接。 我就是这样测试的:

@db = Mongo::Client.new('mongodb://user:password!@localhost:27017/db')
# nothing to do! only for test!
@db.close

我同时启动 - rails app 和 mongodb

$ rails server
$ mongod

在此之后,我在调试模式下创建对我的应用程序的单个请求并检查 mongod 输出:

2016-01-30T14:08:30.047+0200 [initandlisten] connection accepted from     127.0.0.1:65005 #1 (1 connection now open)
2016-01-30T14:08:30.048+0200 [conn1] end connection 127.0.0.1:65005 (0 connections now open)
2016-01-30T14:08:30.048+0200 [initandlisten] connection accepted from 127.0.0.1:65006 #2 (1 connection now open)
2016-01-30T14:08:30.051+0200 [initandlisten] connection accepted from  127.0.0.1:65007 #3 (2 connections now open)
2016-01-30T14:08:30.051+0200 [conn3] end connection 127.0.0.1:65007 (1 connection now open)
2016-01-30T14:08:30.051+0200 [initandlisten] connection accepted from  127.0.0.1:65008 #4 (2 connections now open)
2016-01-30T14:08:30.052+0200 [conn4] end connection 127.0.0.1:65008 (1 connection now open)

在我的 rails 输出中,我看到了下一个:

D, [2016-01-30T14:08:30.046532 #12981] DEBUG -- : MONGODB | Adding localhost:27017 to the cluster.
D, [2016-01-30T14:08:30.050656 #12981] DEBUG -- : MONGODB | Adding localhost:27017 to the cluster.

我要关闭 mongod 并再次检查 rails 输出:

D, [2016-01-30T14:08:50.060270 #12981] DEBUG -- : MONGODB | IOError
D, [2016-01-30T14:09:00.065535 #12981] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:27017
D, [2016-01-30T14:09:10.066730 #12981] DEBUG -- : MONGODB | Broken pipe
D, [2016-01-30T14:09:20.073243 #12981] DEBUG -- : MONGODB | Connection refused - connect(2) for 127.0.0.1:27017
D, [2016-01-30T14:09:30.079056 #12981] DEBUG -- : MONGODB | Broken pipe

最后是我的问题:如何真正关闭与 mongo 的连接? 我究竟做错了什么?

【问题讨论】:

    标签: ruby-on-rails mongodb


    【解决方案1】:

    您可以使用池配置来限制连接数,如下所示:

    @db = Mongo::Client.new('mongodb://user:password!@localhost:27017/db?maxPoolSize=10')

    您可以在此链接上查看更多选项https://docs.mongodb.com/ruby-driver/master/tutorials/ruby-driver-create-client/

    【讨论】:

      最近更新 更多