Mongoid没有超时选项。
http://mongoid.org/en/mongoid/docs/installation.html
我希望Mongoid能够杀死长时间的查询。 如何设置Mongoid查询超时?
如果我什么都不做,Mongoid会等下面很长时间。
mongo > db.currentOp()
{
"opid" : 34973,
"active" : true,
"secs_running" : 1317, // <- too long!
"op" : "query",
"ns" : "db_name.collection_name",
"query" : {
"$msg" : "query not recording (too large)"
},
"client" : "123.456.789.123:46529",
"desc" : "conn42",
"threadId" : "0x7ff5fb95c700",
"connectionId" : 42,
"locks" : {
"^db_name" : "R"
},
"waitingForLock" : true,
"numYields" : 431282,
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(514304267),
"w" : NumberLong(0)
},
"timeAcquiringMicros" : {
"r" : NumberLong(1315865170),
"w" : NumberLong(0)
}
}
}
答案 0 :(得分:1)
实际上,默认情况下所有查询都会超时。您可以设置no_timeout
选项以告知查询永不超时。看看here
您可以使用初始化程序配置超时时间段,例如
Mongoid.configure do |config|
config.master = Mongo::Connection.new(
"localhost", 27017, :op_timeout => 3, :connect_timeout => 3
).db("mongoid_database")
end
答案 1 :(得分:1)
Mongoids的默认查询超时通常为60秒,但由于Rubys线程,在正确关闭进程时往往存在问题。
希望你的请求都不会给Mongrels带来压力,但如果你继续遇到这个问题,我会考虑对你的应用程序进行一些优化更改,或者考虑采用God或Monit。如果你不想改变你的请求,我可能会推荐Unicorn,如果你已经在nginx上了(github做了这个转换,你可以更多地阅读here)
答案 2 :(得分:0)
试试这个解决方案:
ModelName.all.no_timeout.each do |m|
"do something with model"
end