Rails 升级分析器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md 的说明,将 @org-02qudk26/skill-rails-upgrade 安装到你的 AI 助手中。
技能介绍
要解决什么问题
Rails 大版本或次版本升级时,rails app:update 会批量覆盖生成文件,很容易抹掉你在 config/application.rb、bin/dev、mailer/i18n 等处的本地定制。升级前还需要对照官方指南、发布说明和框架默认文件的差异,并同步 Hotwire、importmap 等前端依赖——这些工作分散在多个站点,手工整理成本高。
技能如何工作
本技能把升级流程拆成可执行的检查与分析步骤:
- 确认是 Rails 项目:检查
Gemfile(含rails)、config/application.rb、config/environment.rb;不符合则停止。 - 锁定版本:从
Gemfile.lock或Gemfile读取当前 Rails 版本;用 GitHub CLI 查最新稳定 tag(去掉v前缀),并区分补丁 / 次版本 / 主版本升级。 - 拉取官方与 diff 资料:用 WebFetch 读 Rails 升级指南 中与你的跳转路径相关的章节;再从
railsdiff.org/{current}/{target}汇总默认配置、新文件、initializer、bin/脚本与依赖变更。 - JavaScript 侧:识别 npm/yarn 或 importmap;核对
@hotwired/turbo-rails、@rails/actioncable、config/importmap.rb等是否与目标 Rails 时代对齐。 - 输出升级总结:给出复杂度(小/中/大)、关键破坏性变更、弃用项、推荐步骤,并明确不建议直接跑
rails app:update。 - 选择性合并:按 railsdiff 把变更分为新文件、可安全覆盖、需手动合并、仅注释变更;对自定义文件展示本地版、Rails 新版与建议合并结果;迁移与测试验证后再逐步启用
new_framework_defaults_*。
适用边界与注意点
- 依赖 GitHub CLI(查 release/tag)与 WebFetch(指南、railsdiff);
gh未认证时需先gh auth login。 - railsdiff 若无精确 patch 版本,可退到
x.y.0近似对比。 - 原则:不检查就不覆盖、保留本地意图、变更最小化;任何可能丢失自定义的操作前先展示将被覆盖的内容,便于用 git 回滚。
使用场景
- 现有项目锁在 Rails 7.1,计划升到 8.0 前,需要先对照官方指南和 railsdiff 列出破坏性变更与配置差异
- Gemfile.lock 已确认当前版本,要在不改坏 `config/application.rb` 和自定义 `bin/dev` 的前提下制定升级合并方案
- 应用使用 importmap 与 `@hotwired/turbo-rails`,升级 Rails 时需要核对前端包版本是否与目标框架时代一致
- 补丁或次版本升级前,希望得到小/中/大复杂度评估和推荐步骤,而不是直接执行 `rails app:update`
适合人员
- 长期维护 Rails monolith 的后端工程师,大版本升级前要向团队提交可执行的评估与变更清单
- 全栈 Ruby 开发者,项目深度定制了 initializer 与 bin 脚本,升级时首要诉求是选择性合并而非整库覆盖
- 负责技术债排期的 Tech Lead,需要把当前版本、最新 stable tag 与升级类型整理成对内路线图材料
- 使用 Hotwire / Action Cable 的生产应用维护者,升级同时要梳理 npm 或 importmap 侧与 Rails 的版本对齐问题