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

Ruby on rails 在Rails应用程序中跟踪事件时忽略机器人程序,ruby-on-rails,performance,Ruby On Rails,Performance,我正在通过Rails应用程序中的Mixpanel跟踪事件。例如,我的控制器看起来像 class HomeController < ApplicationController def index track_event "Visitor: View Landing Page" end end class HomeController

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

class HomeController < ApplicationController
  def index
    track_event "Visitor: View Landing Page"
  end
end
class HomeController
问题是,该应用程序受到许多机器人的攻击,最明显的是Pingdom(我们使用的性能跟踪服务)。当机器人点击我的应用程序时,有没有一种干净的方法可以忽略跟踪


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

传统的方法是建立机器人用户代理的索引,并在UA匹配机器人时忽略跟踪事件代码

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

这是一个痛苦的维持,但它通常是有效的。显然,这对任何谎报UA的人来说都是无效的,但除了进行启发式检测以确定他们不是机器人之外,你没什么办法,在Rails 3和4中,您可以使用gem,使您能够使用旧的Rails 2会话变量轻松管理打开/关闭会话。对我来说非常有用:


我没有使用pingdom,但我认为您可以为它们指定一个要加载的URL。如果是,请在查询字符串中包含一个特殊的
bot=1
参数:@SergioTulentsev问题是,可能还有其他不应该被跟踪的机器人访问。例如:谷歌机器人、必应机器人等。有什么理由不能将其作为白名单而不是黑名单?它只能允许用户代理,如Mozilla、IE、ipad等。没有理由,除非你最终会投入大量的工作来构建和维护有效用户代理的白名单。他们在不断地变化,而且这些天使用的代理数量惊人。