🌟 模板简介

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

🛠 定制建议

  1. 数据库配置:根据实际环境修改 .env.development 中的用户名/密码
  2. 权限方案:根据项目复杂度选择 cancancanpundit,避免同时使用
  3. 国际化需求:若无需多语言,可移除 mobility 相关依赖
  4. 任务队列:若无需异步任务,可删除 sidekiq 相关配置
  5. 安全配置:生产环境建议添加 figaro 替代 dotenv,并配置环境变量加密

📚 延伸阅读

源码仓库

模板源码仓库:https://github.com/songjian/rails-template