用途 当 Rails 项目使用 SQLite(尤其是 Rails 8 的 Solid Queue/Cache/Cable 多数据库布局)时,开发数据保存在 storage/*.sqlite3 文件中。新建 git worktree 后该目录为空,bin/rails console、功能开发或针对真实数据的测试都会因缺少数据库而失败。本技能把主工作树的 SQLite 数据库安全复制到新 worktree,省去重新迁移和填充数据。
主要能力
- 解析 config/database.yml,收集指定 RAILS_ENV(默认 development)下所有 .sqlite3 路径。
- 对每个源数据库执行 PRAGMA wal_checkpoint(TRUNCATE),把 WAL 内容刷入主文件,保证复制一致性。
- 复制主文件及其 -wal、-shm 附属文件到目标 worktree 的 storage/。
- 覆盖前把目标已有的同名文件备份为 <filename>.bak,仅保留一层备份。
- 输出摘要,列出复制的每个文件与创建的每个备份,并以退出码区分成功(0)与实际错误(1)。
使用方式 在条件满足时于主工作目录(非 worktree)运行辅助脚本: ruby "${CLAUDE_PLUGIN_ROOT}/skills/using-sqlite-worktrees/scripts/create_sqlite_worktree.rb" <worktree-path> 运行前需确认四项前置条件:主工作目录存在 config/database.yml;配置中含 adapter: sqlite3;已安装 sqlite3 CLI;目标路径是真实 git worktree(通过 git -C <path> rev-parse --is-inside-work-tree 校验)。任一条件不满足即停止并报告,不进行部分设置。 该技能通常由 using-git-worktrees 技能在 bundle install 之后、bin/rails db:test:prepare 之前委托调用;也可在用户要求“把 SQLite 数据复制到 worktree”或“用当前开发数据刷新 worktree”时直接触发。
适用场景
- 刚为 Rails+SQLite 项目创建 worktree,希望直接使用现有开发数据。
- 主分支开发数据更新后,重新同步已有 worktree 的 storage/(同一命令,已有文件先备份为 .bak)。
限制与注意事项
- 不适用于非 Rails 项目、使用 Postgres/MySQL 等非 SQLite 适配器的 Rails 项目,以及生产或测试数据库。
- 不要在 rails server 或 rails console 正在写入源数据库时运行,应先停止写入方。
- 不要用裸 cp 复制 SQLite 文件,否则 WAL 模式下副本可能不一致;也不要只复制主文件而遗漏 -wal/-shm 附属文件。
- 重复同步会覆盖 .bak,若 worktree 中有重要本地数据应先提交或导出。
- 当由 using-git-worktrees 委托调用时,脚本非零退出必须被视为失败:打印 stderr、跳过 bin/rails db:test:prepare 与基线测试,并报告“worktree 已创建但数据库设置不完整”。