SuperAPI AI 工具集

dual-boot

通用与其它

查看项目

更新于 10-16 02:37

技能介绍

用途:为 Ruby 应用搭建并管理双版本依赖环境,基于 next_rails gem,常用于 Rails 版本升级,也适用于 Ruby 版本或 Gemfile 中核心依赖(如 sidekiq、devise、pg)的升级。通过 /dual-boot 调用,可传入当前与目标版本参数(如 /dual-boot 7.0 7.1);未传参时从 Gemfile 检测当前版本并询问目标版本。

主要能力:添加 next_rails 到 Gemfile 并初始化双版本环境;用 next? 条件配置 Gemfile 以支持两套依赖;用 NextRails.next? 在应用代码中按版本分支;配置 CI 同时测试两套依赖;升级完成后清理双版本代码。

使用方式:将 next_rails 加在 Gemfile 根层级(不要放进 :development 或 :test 组),执行 bundle install;仅在 Gemfile.next 不存在时运行 next_rails --init。安装两套依赖:当前版本用 bundle install,下一版本用 cp Gemfile.lock Gemfile.next.lock && BUNDLE_GEMFILE=Gemfile.next bundle install。运行下一版本可用 next bundle install、next bundle exec rspec,或 BUNDLE_GEMFILE=Gemfile.next bundle exec rspec。测试应使用项目自身的测试运行器,先检测 rspec-rails、parallel_tests、turbo_tests、minitest-parallel_fork 及 spec/ 或 test/ 目录,优先使用 bin/test 等封装命令。

关键原则:版本分支必须使用 NextRails.next?,禁止使用 respond_to?、defined?、const_defined? 等特性检测;仅当新旧 API 真正互不兼容时才分支,普通弃用警告应直接迁移调用点。将下一版本分支放在上方,便于升级后机械清理。确保弃用警告未被静默,否则无法跟踪升级进度。若 Gemfile.next 已存在,切勿再次运行 next_rails --init,以免重复生成 next? 方法。

清理流程:搜索所有 NextRails.next? 引用,仅保留 true 分支,删除 else 分支,移除 Gemfile 中的 next? 方法与不再需要的 next_rails gem,删除 Gemfile.next 并用 Gemfile.next.lock 替换 Gemfile.lock,更新 CI 移除双版本配置,运行完整测试后提交。

适用场景:Rails、Ruby 或核心依赖升级期间需要并行维护两套依赖、逐步迁移代码并验证兼容性。限制:具体版本兼容细节、CI 平台配置示例与代码模式需参考技能内附带的 references 与 workflows 文档;本资料未提供收费、价格或平台支持信息。