在Rails应用程序中跟踪事件时忽略机器人

时间:2012-10-28 16:00:30

标签: ruby-on-rails performance

我正在通过我的Rails应用中的Mixpanel跟踪事件。例如,我的控制器看起来像

class HomeController < ApplicationController
  def index
    track_event "Visitor: View Landing Page"
  end
end

问题是应用程序受到了许多机器人的攻击,最明显的是Pingdom(我们使用的性能跟踪服务)。当它是一个击中我的应用程序的机器人时,是否有一种干净的方法可以忽略跟踪?

注意:我对跟踪唯一身份访问者感兴趣,因此我为每位访问者分配了一个唯一ID的Cookie。机器人显然不存储cookie。

2 个答案:

答案 0 :(得分:5)

执行此操作的传统方法是构建机器人用户代理的索引,并在UA与机器人匹配时忽略您的跟踪事件代码。

bots = /Googlebot|Pingdom|.../
unless request.env["HTTP_USER_AGENT"].match(bots)
  track_event(...)
end

维持这是一种痛苦,但它通常是有效的。对于任何关于他们的UA的人来说,这显然是没有效果的,但除了做启发式检测以确定他们不是机器人之外,你没有太多可以做的事情,但在这种情况下这可能不值得。< / p>

答案 1 :(得分:0)

在Rails 3&amp; 4您可以使用gem,使您可以使用旧的Rails 2会话变量轻松管理打开/关闭会话。为我工作很好:

https://github.com/kares/session_off