rack-tracker不只是Rails专属Sinatra与纯Rack应用接入跟踪分析的快速指南【免费下载链接】rack-trackerTracking made easy: Don’t fool around with adding tracking and analytics partials to your app and concentrate on the things that matter.项目地址: https://gitcode.com/gh_mirrors/ra/rack-trackerrack-tracker 是一个轻量级 Ruby 跟踪中间件让 Sinatra 和纯 Rack 应用也能一键接入 Google Analytics、Facebook Pixel 等 15 数据分析服务无需再手动往模板里塞跟踪代码片段。很多新手以为它只能配合 Rails 使用其实它骨子里就是一个标准的 Rack 中间件——只要你的应用会产出 HTML就能用。 为什么 rack-tracker 不是Rails 专属rack-tracker 的核心是一个名为Rack::Tracker的中间件源码见lib/rack/tracker.rb它的工作流程非常纯粹拦截经过的 HTTP 响应检查Content-Type是否为 HTML非 HTML 响应直接放行把各服务Google、Bing、Hotjar 等的script片段注入到/head或/body前。而 Rails 的部分只是一个可选的 Railtielib/rack/tracker/railtie.rb仅当检测到Rails常量存在时才加载。换句话说Rails 只是锦上添花Rack 才是它的地基。这正是 Sinatra 和纯 Rack 应用可以直接复用它的根本原因。第 1 步安装 rack-tracker 跟踪库在应用的 Gemfile 中加入一行然后执行bundlegem rack-tracker也可以直接gem install rack-tracker或者把仓库克隆下来阅读源码git clone https://gitcode.com/gh_mirrors/ra/rack-tracker依赖非常轻只需要rack、tilt和activesupport对 Sinatra 这类小应用毫无负担。第 2 步Sinatra 应用接入步骤Sinatra 本身运行在 Rack 之上接入方式就是在应用前面挂一层 Tracker 中间件。以config.ru为例require rack/tracker require sinatra use Rack::Tracker do handler :google_analytics, { tracker: U-XXXXX-Y } end run Sinatra::Application启动后每一个 HTML 页面的/head前都会自动出现 Google Analytics 的脚本无需修改任何视图文件。想同时接多个服务也很简单在同一块 DSL 里继续声明即可use Rack::Tracker do handler :google_analytics, { tracker: U-XXXXX-Y } handler :google_tag_manager, { container: GTM-XXXXXX } handler :facebook_pixel, { id: PIXEL_ID } end第 3 步纯 Rack 应用接入步骤如果你的应用完全由Rack::Builder搭建没有用任何 Web 框架接入方式完全一致require rack/tracker map / do use Rack::Tracker do handler :google_analytics, { tracker: U-XXXXX-Y } handler :go_squared, { tracker: ABCDEFGH } end run MyRackApp end 注意中间件会检查响应的Content-Type只有包含html的响应才会被注入脚本所以你的 JSON API 端点天然安全不会被污染。没有 Rails 控制器如何发送服务端事件Rails 用户在控制器里能调用tracker { |t| t.google_analytics :send, ... }那是 Railtie 自动注入的扩展。Sinatra / 纯 Rack 里没有这个魔法方法但 rack-tracker 把事件统一存放在请求环境变量env[tracker]中你可以直接写入get /login do request.env[tracker] { google_analytics [ { class_name Send, category Users, action Login, label Standard } ] } 登录成功 end下一次渲染 HTML 时这段数据就会被 HandlerDelegatorlib/rack/tracker/handler_delegator.rb转换成对应的 JS 事件代码。如果你希望在自己的 Sinatra 应用里复用 Rails 风格的tracker方法只需一行include Rack::Tracker::Controller定义在lib/rack/tracker/controller.rb。内置跟踪服务一览15 主流平台开箱即用在lib/rack/tracker/目录下每个子目录就是一个服务 Handler全部开箱即用服务handler 名称典型配置项Google Analytics:google_analyticstrackerGoogle Global Site Tag:google_globaltrackersGoogle Tag Manager:google_tag_managercontainerGoogle AdWords 转化:google_adwords_conversionid,labelFacebook / Facebook Pixel:facebook/:facebook_pixelidHotjar:hotjarsite_idBing:bingtrackerHubspot:hubspotsite_idDrift:driftaccount_idHeap:heapenv_idVWO:vwoaccount_idGoSquared:go_squaredtrackerCriteo:criteoset_accountZanox:zanoxaccount_id另外还支持动态配置配置项可以传 lambda按每个请求动态取值例如facebook_pixel的id就可以写成lambda { |env| env[PIXEL_ID] }方便多租户场景。DNT 隐私保护默认尊重用户的不跟踪选择 ️从 2.0.0 起当请求带有DNT: 1Do Not Track头时rack-tracker默认不注入任何跟踪脚本这是对用户隐私的友好默认值实现在lib/rack/tracker/handler.rb。如果某个 Handler 确实需要忽略该头可显式传DO_NOT_RESPECT_DNT_HEADER: true——不过官方建议三思而后行。进阶为自定义分析服务编写 Handlerrack-tracker 的扩展模型对非 Rails 应用同样友好。只需继承Rack::Tracker::Handler设置self.position :head或:body在handler_name对应的目录里放一个template/xxx.erb模板在中间件里注册handler MyHandler, { awesome: true }。模板中可直接访问#options和当前请求的env需要多位置注入时还可以重写#inject方法参考lib/rack/tracker/google_tag_manager/google_tag_manager.rb的实现。常见问题速查 ✅脚本注入到了非页面响应不会。只有Content-Type含html的响应才会被处理。多个服务顺序问题按 DSL 中handler声明顺序依次注入。安全性提醒跟踪数据最终会以 JavaScript 形式输出请勿把未经验证的用户输入直接写入事件参数以免 XSS 风险。线程安全吗中间件在每次请求时对实例做dup见lib/rack/tracker.rb多线程环境下放心使用。小结rack-tracker 的价值不依赖于 Rails它是一个标准 Rack 中间件Sinatra 应用三行代码即可接入纯 Rack 应用同样适用。统一的管理入口、15 内置服务、服务端事件注入和 DNT 隐私支持让跟踪代码满天飞的问题在轻量级应用中同样得到优雅解决。【免费下载链接】rack-trackerTracking made easy: Don’t fool around with adding tracking and analytics partials to your app and concentrate on the things that matter.项目地址: https://gitcode.com/gh_mirrors/ra/rack-tracker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考