关于 create-engine-installer
create-engine-installer 是用于构建和审查 Ruby engine 安装生成器的技能。它规定了有序验证流程,涵盖宿主应用文件、重复运行的幂等性、测试和安装文档。
主要功能
- 01验证宿主应用中的输出路径
- 02为文件和路由注入添加保护
- 03测试生成器重复运行的幂等性
- 04说明生成内容与手动步骤
- 05衔接相关 engine 技能
适用场景
- 01为 Ruby engine 构建安装器
- 02检查生成的初始化文件和路由
- 03避免重复运行时生成重复文件
- 04测试安装生成器行为
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ igmarin/ rails-agent-skills --skill create-engine-installer安装后在 Claude Code 中输入/create-engine-installer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
EXAMPLES.mdassets/installer-template.rbREADME.md详细介绍
创建 Engine 安装器
验证工作流(硬性门槛)
构建或审查安装生成器时,请按顺序执行以下步骤。未完成第 3 和第 4 步,不得发布生成器。
- 生成:在干净的宿主应用上运行生成器。首次运行时,展示命令和标记为 观察到的输出 的终端输出。确认文件已创建在正确的宿主路径中(初始化器位于
config/initializers/,迁移位于db/migrate/,路由挂载在config/routes.rb中)。 - 验证:检查输出文件是否存在于正确的宿主路径中。列出用于确认初始化器、路由和迁移存在的 Shell 命令。
- 重新运行:第二次运行生成器;确认没有插入重复文件、路由或初始化器代码块。展示命令和标记为 观察到的输出 的终端输出,以证明其具备幂等行为(跳过/冲突解决)。请使用针对特定场景的独特值,而非逐字复制模板内容。
- 测试:在生成器规格中覆盖单次运行和重新运行行为(见下方规格模板)。
- 记录文档:列出生成器生成的内容与用户必须手动完成的事项,包括必需的环境变量、回滚步骤和任何安装文档,并根据生成器实际产出的内容进行核对。
关键实现规则:
- 仅在初始化器中进行配置(避免启动时修改)。
- 将所有必需的环境变量与回滚步骤一并记录。
- 提供便于编辑的合理默认值。
幂等性保护
所有生成器操作都必须支持安全地多次运行。在每次执行时保护所有文件创建和注入操作:
def create_initializer
return if File.exist?(File.join(destination_root, 'config/initializers/my_engine.rb'))
create_file 'config/initializers/my_engine.rb', <<~RUBY
MyEngine.configure do |config|
config.user_class = "User"
end
RUBY
end
def mount_route
# inject_into_file with force: false skips insertion if sentinel already present
inject_into_file 'config/routes.rb',
"\n mount MyEngine::Engine, at: '/admin'\n",
after: "Rails.application.routes.draw do",
force: false
end
最简重新运行规格:
it 'does not duplicate the route mount on rerun' do
2.times { run_generator }
expect(File.read(file('config/routes.rb')).scan('mount MyEngine::Engine').size).to eq(1)
end
对于较大的安装器,请将扩展保护模式和规格模板提取到与生成器并列的专用配套文件中(例如 lib/generators/my_engine/install/install_generator_patterns.rb),以保持生成器精简,并使本技能聚焦于工作流。在生成器注释中明确引用该文件,以便未来维护者知道共享模式的位置。
集成
| 技能 | 何时衔接 |
|---|---|
| 创建 Engine | 设计安装器将要配置的 Engine 结构时 |
| 记录 Engine 文档 | 编写安装步骤或升级说明时 |
| 测试 Engine | 添加生成器规格或虚拟应用安装覆盖时 |
评论
支持 Markdown