Игнорировать протоколирование Rails для запросов на основе IP - PullRequest
1 голос
/ 04 мая 2011

У меня есть приложение rails, которое находится за HAProxy, и я хотел бы игнорировать все журналы Rails, поступающие с эхо-запросов с серверов HAProxy. Серверы пропингуют ~ 1 / сек и действительно загромождают файл журнала.

Ответы [ 3 ]

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

Не проверял это, но оно должно работать:


class Rails::Rack::Logger
  def call_with_filter(env)
    if env['REMOTE_ADDR'] == '10.0.0.1'
      @app.call(env)
    else
      call_without_filter(env)
    end
  end
  alias_method_chain :call, :filter
end

см. Оригинал railties-3.0.7 / lib / rails / rack / logger.rb.

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

Решение, на котором я остановился, было относительно не слишком технологичным.

Цель использования HAProxy не просто для балансировки нагрузки, а для обеспечения того, чтобы узлы, на которые направляется трафик, действительно работали.Это означает, что мы хотели, чтобы HAProxy не только подключался к серверу, чтобы увидеть, работает ли он, но и проверял, что Nginx и Passenger работают и работают.

Я поместил статический текстовый файл в открытые ресурсы проекта rails, и HAProxy ударил файл.Файл будет обслуживаться полным стеком и будет хорошим индикатором того, что сервисы работают.Являясь общедоступным активом, попадание не отображается в журнале, а рассылка спама прекращается.

Несмотря на то, что это не дает более глубокого тестирования в стеке Rails, время для внедрения меньше, чем у любого кодированного решения, оно не добавляет дополнительной сложности приложению и может быть применено в любых будущих приложениях.

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

Решение, которое я выбрал, было немного более системным. Я создал статический текстовый файл в общедоступном каталоге и переключил HAProxy, чтобы использовать его в качестве местоположения ping. Ведение журнала отсутствует и является менее сложным, чем решение кода.

Я попробовал приведенный выше пример и смог заставить его работать, но делать исправление обезьяны для этой проблемы не кажется необходимым, однако, если требования были немного более сложными (т.е. HAProxy должен был попасть в конкретный контроллер) тогда я бы выбрал решение Романа

...