1

我有一个在 HAProxy 后面的 rails 应用程序,我想忽略来自 HAProxy 服务器的 ping 的所有 Rails 日志记录。服务器正在 ping ~1/sec,并且确实弄乱了日志文件。

4

3 回答 3

1

尚未对此进行测试,但它应该可以工作:


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 的原文。

于 2011-05-04T19:11:59.473 回答
0

我选择的解决方案更加系统化。我在公共目录中创建了一个静态文本文件,并将 HAProxy 切换为将其用作其 ping 位置。没有日志记录,并且没有代码解决方案复杂。

我确实尝试了上面的示例并且能够让它工作,但是似乎没有必要为这个问题做一个猴子补丁,但是如果要求有点复杂(即 HAProxy 必须点击特定的控制器),那么我' d 选择Roman 的 解决方案

于 2011-05-06T12:03:06.203 回答
0

我最终采用的解决方案技术含量相对较低。

使用 HAProxy 的目的不仅仅是为了负载平衡,而是确保被引导流量的节点实际上是启动的。这意味着我们希望 HAProxy 不仅要访问服务器以查看其是否启动,还要测试 Nginx 和Passenger 是否已启动并正常运行。

我将一个静态文本文件放在 rails 项目的公共资产中,并让 HAProxy 命中该文件。该文件将由完整堆栈提供,并且是服务已启动的良好指标。作为一项公共资产,命中不会出现在日志中,并且垃圾邮件被停止。

尽管这并未对 Rails 堆栈进行更深入的测试,但实现时间比任何编码解决方案都要短,它不会给应用程序增加任何额外的复杂性,并且可以滚动到任何未来的应用程序中。

于 2011-05-26T12:54:34.527 回答