💎 我的 Rails 开发必备模板分享
🌟 模板简介
Rails 模板是快速搭建项目的利器!通过 rails new
命令结合模板,可一键生成包含常用配置、依赖和初始化代码的项目框架,大幅减少重复工作,让开发聚焦核心业务逻辑。
这个模板适合 Rails 7 版本,暂时不支持最新的 Rails 8 版本。
🚀 核心特性
- 数据库:默认使用 PostgreSQL,适合生产环境的稳定性需求
- 测试栈:集成 RSpec + Factory Bot + Faker,构建完整测试体系
- HTTP 测试:通过 VCR + Webmock 实现 HTTP 请求的录制与模拟
- 后台管理:集成 ActiveAdmin,快速生成高颜值管理界面
- 多语言支持:Mobility + rails-i18n,轻松实现国际化字段
- 用户认证:Devise + CancanCan/Pundit,完善的权限控制方案
- 异步任务:Sidekiq + Sidekiq-Scheduler,支持后台任务与定时任务
- 状态管理:AASM 状态机,清晰定义业务对象生命周期
📦 使用方法
# 创建新项目并应用模板
rails new demo \
--skip-rubocop # 跳过默认代码检查
--skip-test # 不使用默认测试框架
-d=postgresql # 指定数据库类型
-m=~/work/rails-template/base_rails_template.rb # 模板路径
📝 模板代码详解
# ------------------------------
# 开发与测试环境依赖
# ------------------------------
gem_group :development, :test do
gem "rspec-rails", "~> 6.0" # RSpec 测试框架核心
gem "factory_bot_rails", "~> 6.2" # 测试数据工厂,简化数据构建
gem "faker", "~> 2.21" # 生成随机测试数据(人名、地址等)
gem "dotenv-rails", "~> 2.8" # 环境变量管理,安全隔离配置
gem "vcr", "~> 7.0" # 录制 HTTP 交互,避免重复请求
gem "webmock", "~> 3.19" # 模拟 HTTP 请求,隔离外部依赖
end
# ------------------------------
# 生产与通用环境依赖
# ------------------------------
gem "rails-i18n", "~> 6.1" # Rails 国际化基础支持
gem "countries", "~> 3.4" # 国家/地区数据(ISO 标准)
gem "activeadmin", "~> 2.7" # 后台管理系统,支持 CRUD 快速生成
gem "devise", "~> 4.9" # 用户认证系统(注册/登录/密码找回等)
gem "cancancan", "~> 3.6" # 基于角色的权限控制
gem "draper", "~> 4.2" # 视图模型装饰器,分离业务逻辑
gem "pundit", "~> 2.2" # 细粒度授权库,支持策略模式
gem "devise-i18n", "~> 1.10" # Devise 国际化支持
gem "ransack", "~> 2.6" # 高级搜索功能,支持复杂查询条件
gem "mobility", "~> 2.1" # 多语言字段存储解决方案
gem "mobility-ransack", "~> 1.1" # Mobility 与 Ransack 集成
gem "sassc-rails", "~> 2.1" # 高性能 Sass 编译器
gem "default_value_for", "~> 3.0" # 数据库字段默认值设置
gem "sidekiq", "~> 7.1" # 后台任务处理引擎
gem "aasm", "~> 5.2" # 状态机管理,清晰定义对象状态转换
gem "sidekiq-scheduler", "~> 7.4" # Sidekiq 定时任务扩展
gem "activeadmin_addons", "~> 1.2" # ActiveAdmin 功能扩展包
gem "kaminari-i18n", "~> 1.2" # 分页组件国际化
gem "httparty", "~> 0.21" # 简洁的 HTTP 客户端接口
after_bundle do
# ------------------------------
# 环境配置文件生成
# ------------------------------
create_file '.env.development', <<~ENV
PGUSER=postgres # PostgreSQL 用户名
PGPASSWORD=root # 数据库密码
PGHOST=localhost # 数据库主机
ENV
# ------------------------------
# 框架组件初始化
# ------------------------------
generate "rspec:install" # 初始化 RSpec 测试结构
generate "active_admin:install" # 安装 ActiveAdmin 后台系统
# ------------------------------
# VCR 测试配置
# ------------------------------
append_to_file 'spec/spec_helper.rb', <<~SPEC_HELPER
require 'vcr'
VCR.configure do |c|
c.cassette_library_dir = 'spec/cassettes' # 录制文件存储路径
c.hook_into :webmock # 集成 Webmock
c.configure_rspec_metadata! # 自动添加 RSpec 元数据
end
SPEC_HELPER
# ------------------------------
# 数据库初始化
# ------------------------------
rails_command "db:create" # 创建数据库
rails_command "db:migrate" # 执行迁移
rails_command "db:seed" # 加载初始数据
# ------------------------------
# 应用国际化配置
# ------------------------------
inject_into_file 'config/application.rb', after: "class Application < Rails::Application\n" do
" config.i18n.default_locale = :'zh-CN'\n" # 设置默认语言为中文
end
end
🛠 定制建议
- 数据库配置:根据实际环境修改
.env.development
中的用户名/密码 - 权限方案:根据项目复杂度选择
cancancan
或pundit
,避免同时使用 - 国际化需求:若无需多语言,可移除
mobility
相关依赖 - 任务队列:若无需异步任务,可删除
sidekiq
相关配置 - 安全配置:生产环境建议添加
figaro
替代dotenv
,并配置环境变量加密