关于 upgrade-engine
用于规划和验证 Rails engine 对不同 Ruby 与 Rails 版本兼容性的技能。它要求声明的支持版本有对应的 CI 矩阵覆盖,并通过自动加载检查和完整测试。
主要功能
- 01定义 Ruby 与 Rails 支持目标
- 02检查 Zeitwerk 自动加载
- 03检查初始化器的重载行为
- 04让 gemspec 依赖范围匹配已测版本
- 05按版本验证可选集成
- 06要求 CI 覆盖声明的版本组合
适用场景
- 01规划 Rails engine 版本升级
- 02发布前检查兼容性
- 03发现过宽的 gemspec 依赖范围
- 04构建多版本 CI 矩阵
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ igmarin/ rails-agent-skills --skill upgrade-engine安装后在 Claude Code 中输入/upgrade-engine确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
EXAMPLES.mdassets/ci_matrix.ymlcompatibility_matrix.mdzeitwerk_notes.md详细介绍
升级引擎
核心原则: 每个声明支持的 Rails/Ruby 版本都必须纳入 CI 矩阵。优先明确指定支持目标,而不是依赖意外兼容性。
硬性门槛
Before claiming support for a Rails/Ruby version:
1. bundle exec rake zeitwerk:check # verify autoloading on each version
2. bundle exec rspec # full suite per matrix version
3. CI matrix must pass — not just main Rails version
DO NOT ship compatibility changes without verifying both autoloading and full suite.
核心流程
- 定义支持的 Ruby 和 Rails 版本——在 gemspec 和 README 中注明。
- 运行
bundle exec rake zeitwerk:check——文件路径必须与常量名称完全匹配(例如,my_engine/widget_policy.rb→MyEngine::WidgetPolicy)。 - 检查初始化器在启动和重新加载时的行为——对重新加载敏感的钩子使用
config.to_prepare;在加载时执行的钩子在开发环境中无法安全应对重新加载。 - 验证 gemspec 依赖范围与测试版本一致:
spec.add_dependency "rails", ">= 7.0", "< 8.0"——范围必须反映 CI 实际测试的内容。未设上限或过度声称兼容性(例如声明>= 5.2,却未测试 5.2/6.x)会导致不易察觉的不兼容。 - 用功能检测替代
Rails.version分支——版本检查在不同补丁版本间很脆弱:
# ❌ Bad — brittle, wrong for patch versions
if Rails.version >= "7.0"
config.active_support.cache_format_version = 7.0
end
# ✅ Good — detect the capability directly
if ActiveSupport::Cache.respond_to?(:format_version=)
config.active_support.cache_format_version = 7.0
end
- 按版本检查可选集成(作业、邮件程序、资源、路由、安装生成器、dummy 应用挂载)。即使某项集成不存在,也要注明检查情况。
- CI 矩阵必须针对每种声明支持的 Rails/Ruby 组合运行:
strategy:
matrix:
include:
- { ruby: "3.2", rails: "7.1" }
- { ruby: "3.3", rails: "7.2" }
扩展资源
输出风格
- 说明目标支持矩阵。
- 列出最可能出现问题的环节。
- 在隔离且可测试的边界中进行兼容性更改。
- 如果尚无矩阵覆盖,建议添加。
- 包含一个可选集成矩阵,列出作业、邮件程序、资源、路由、生成器和 dummy 应用挂载。每行注明
present/absent、检查的文件路径,以及逐版本验证命令。 - 语言——除非明确要求其他语言,否则必须使用英语。
集成
| Skill | 何时串联 |
|---|---|
| test-engine | 测试矩阵设置、CI 配置、多版本测试 |
| create-engine | 引擎结构、宿主约定、命名空间设计 |
| release-engine | 版本管理、更新日志、兼容性更改说明 |
评论
支持 Markdown