Сервер Mongodb не работает, как предотвратить отключение приложения Rails? - PullRequest
1 голос
/ 03 мая 2011

Я использую central_logger для хранения журналов из нашего приложения Rails в mongodb.Когда сервер mongo вышел из строя недавно, наше приложение начало устанавливать тайм-аут на монго-вставках.Как я могу предотвратить тайм-ауты Rails, если сервер mongo не работает?

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Драйвер ruby ​​ поддерживает тайм-ауты, например,

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

Но драгоценный камень central_logger этим не пользуется. Таким образом, вы можете либо разветвить его, чтобы добавить это туда, либо 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

Вам потребуется путь обезьяны in: timeout => 5 (или что-то еще) в Mongo :: Connection.new

Я бы поспорил, что автору central-logger хотелось бы, чтобы это было там, поэтому, скорее всего, будет приветствоваться запрос на разветвление и извлечение.

0 голосов
/ 03 мая 2011

Обычно вставка в базу данных должна быть быстрой, поэтому вы можете работать с тайм-аутом ruby:

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

этот код будет работать по истечении 200 миллисекунд в любом случае.

0 голосов
/ 03 мая 2011

Вы можете использовать наборы реплик - поэтому, если мастер выйдет из строя, он может автоматически переключиться на одну из реплик.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...