Vanity 与 Rails 集成:7 个步骤在 Rails 5/6/7 项目中启用 A/B 测试
【免费下载链接】vanityExperiment Driven Development for Ruby项目地址: https://gitcode.com/gh_mirrors/va/vanity
Vanity 是一个面向 Ruby 与 Rails 的 A/B 测试框架,以「实验驱动开发(Experiment Driven Development)」为核心理念,让你无需自研埋点系统,就能在 Rails 项目中快速启用 A/B 测试。本教程将用 7 个清晰的步骤,带你完成 Vanity 与 Rails 集成,覆盖从安装、配置到查看实验报告的完整流程,并兼容 Rails 5.2、6.x 与 7.x 项目。
为什么选择 Vanity 做 Rails A/B 测试?
对于 Rails 开发者来说,Vanity 的优势非常直观:
- 存储无关:实验数据可以存放在 Redis、MongoDB 或关系型数据库(ActiveRecord)中,完全由你的基础设施决定;
- 原生 Rails 集成:通过
use_vanity一行声明即可接入控制器,视图层直接使用ab_test帮助方法; - 自带可视化仪表盘:不用额外开发后台,就能查看每个实验的参与者、转化率与统计显著性;
- 多版本 Rails 兼容:项目官方在 Rails 5.2、6.0、6.1(gemfiles 目录中均有对应配置)上持续测试,4.x 版本同样兼容 Ruby 2.5+。
第 1 步:安装 Vanity gem
在 Gemfile 中添加依赖并安装,这是最基础的集成动作:
gem "vanity"然后执行bundle install。如果你选择 Redis 作为数据存储,还需要在 Gemfile 中加入:
gem "redis", ">= 3.2" gem "redis-namespace", ">= 1.1.0"第 2 步:创建数据存储配置文件
Vanity 会读取项目根目录下的config/vanity.yml,并根据当前环境(development / test / production)加载对应配置。以下是一个 Redis 方案的示例:
development: adapter: redis url: redis://localhost:6379/0 test: adapter: redis collecting: false production: adapter: redis url: redis://<%= ENV["REDIS_HOST"] %>:<%= ENV["REDIS_PORT"] %>/0如果项目使用 SQL 数据库(MySQL、PostgreSQL、SQLite 等),可将 adapter 改为active_record,复用 Rails 现有连接。测试环境建议设置collecting: false,这样测试时不会写入任何实验数据。
第 3 步:初始化数据库并运行迁移
采用 ActiveRecord 存储时,需要先执行生成器创建迁移文件,再运行迁移:
rails generate vanity rake db:migrate生成器会创建实验表、指标表以及对应的唯一索引迁移,相关实现见 lib/generators/vanity/migration_generator.rb。所有适配器(Redis、MongoDB、ActiveRecord)的实现位于 lib/vanity/adapters/,例如 redis_adapter.rb。
第 4 步:开启用户身份识别
A/B 测试的核心是区分「谁看到了哪个版本」。在ApplicationController中调用use_vanity,并传入一个返回当前用户的方法即可:
class ApplicationController < ActionController::Base use_vanity :current_user def current_user User.find(session[:user_id]) end enduse_vanity会为控制器注入身份识别过滤器与跟踪过滤器;当用户未登录时,它会通过 Cookie 自动生成匿名身份并跨请求记住,具体逻辑见 lib/vanity/frameworks/rails.rb。同时,你还可以给邮件(ActionMailer)传入身份,让邮件模板也参与实验。
第 5 步:定义你的第一个 A/B 测试
在experiments/目录下创建实验定义文件,例如experiments/price_options.rb:
ab_test "Price options" do description "测试三个定价档位哪个转化率最高" alternatives 19, 25, 29 metrics :signups end对应地,在experiments/metrics/signups.rb中定义转化指标:
metric "Signup" do description "衡量成功注册的用户数量" end一个实验需要至少两个 alternative(备选方案),未指定默认方案时会取第一个。实验类AbTest的完整定义(默认值、权重分配、评分逻辑等)见 lib/vanity/experiment/ab_test.rb。
第 6 步:在页面中展示实验并跟踪转化
在视图模板中,通过ab_test帮助方法读取当前用户被分配到的方案:
<h2>只需 <%= ab_test(:price_options) %> 美元/月,立即开始!</h2>当用户完成关键动作(如注册、购买)时,调用Vanity.track!记录转化:
class SignupController < ApplicationController def create @account = Account.new(params[:account]) if @account.save Vanity.track!(:signups) redirect_to @account else render action: :offer end end end注意:转化跟踪前用户应已通过ab_test加入实验,否则只会记录转化而不会计入实验参与者。
第 7 步:查看实验报告与仪表盘
有两种方式查看实验结果:
命令行报告:运行vanity report命令,即可输出 HTML 格式的完整报告,包含每个备选方案的参与者数量、转化率与胜出概率。
Web 仪表盘:在config/routes.rb中加入以下路由:
get '/vanity' => 'vanity#index' get '/vanity/participant/:id' => 'vanity#participant' post '/vanity/complete' post '/vanity/chooses' post '/vanity/reset' post '/vanity/enable' post '/vanity/disable'并创建控制器:
class VanityController < ApplicationController include Vanity::Rails::Dashboard layout false end之后访问/vanity即可看到实时仪表盘,直接对实验执行启用、禁用、重置与指定胜出方案等操作。仪表盘视图模板位于 lib/vanity/templates/,如需定制,可运行rails g vanity:views把默认视图复制到app/views/vanity再自由修改。
生产环境提示:Forking 服务器重连
如果使用 Unicorn、Passenger 这类会 fork 工作进程的服务器,务必在 fork 后重新建立数据库连接,避免多个 worker 共享同一连接导致数据竞争:
# config/unicorn.rb after_fork do |server, worker| defined?(Vanity) && Vanity.reconnect! end总结
通过以上 7 个步骤,你就完成了 Vanity 与 Rails 集成,在 Rails 5/6/7 项目中正式启用了 A/B 测试:安装 gem、配置数据存储、初始化数据库、声明用户身份、定义实验、展示方案并跟踪转化、最后通过仪表盘观察数据。官方文档还提供了更深入的配置项说明(如use_js异步注册参与者、Cookie 参数定制等),详见 doc/configuring.textile 与 doc/rails.textile。现在就去定义一个实验,让数据替你做决策吧!🚀
【免费下载链接】vanityExperiment Driven Development for Ruby项目地址: https://gitcode.com/gh_mirrors/va/vanity
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考