Mongodb服务器出现故障,如何防止Rails应用程序超时?

我正在使用central_logger来存储mongodb中我们的Rails应用程序的日志。 当mongo服务器最近关闭时,我们的应用程序开始计时mongo插入。 如果mongo服务器出现故障,如何防止Rails超时?

ruby驱动程序支持这样的超时

@conn = Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5) 

但是central_logger gem没有使用它。 所以你可以将它分叉以在那里添加它,或者使用Monkey-path的CentralLogger :: MongoLogger.connect方法

它目前有

 def connect @mongo_connection ||= Mongo::Connection.new(@db_configuration['host'], @db_configuration['port'], :auto_reconnect => true).db(@db_configuration['database']) if @db_configuration['username'] && @db_configuration['password'] # the driver stores credentials in case reconnection is required @authenticated = @mongo_connection.authenticate(@db_configuration['username'], @db_configuration['password']) end end 

你需要在Mongo :: Connection.new中使用monkey-path :timeout => 5(或其他)

我敢打赌,中央记录器的作者希望在那里有这个,所以叉和拉请求可能会受到欢迎。

您可以使用副本集 – 因此,如果主服务器关闭,它可以自动故障转移到其中一个副本。

通常数据库插入应该很快,因此您可以使用ruby超时:

 require 'timeout' Timeout::timeout(0.2) do ... write to log server end 

此代码将超时并在任何情况下在200毫秒后继续。