我可以设置Mongoid查询超时吗? Mongoid不会长时间查询

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) } } } 

实际上,默认情况下所有查询都有超时。 您可以设置no_timeout选项以告知查询永不超时。请在此处查看

您可以使用初始化程序配置超时期限,如下所示

 Mongoid.configure do |config| config.master = Mongo::Connection.new( "localhost", 27017, :op_timeout => 3, :connect_timeout => 3 ).db("mongoid_database") end 

Mongoids的默认查询超时通常为60秒,但由于Rubys线程,在正确关闭进程时往往存在问题。

希望你的请求都不会给Mongrels带来压力,但如果你继续遇到这个问题,我会考虑对你的应用程序进行一些优化更改,或者考虑采用God或Monit。 如果你不想进入那个并希望改变你的请求,我可能会推荐Unicorn,如果你已经在nginx上了(github做了这个过渡,你可以在这里阅读更多)

试试这个解决方案

 ModelName.all.no_timeout.each do |m| "do something with model" end 

https://stackoverflow.com/a/19987744/706022