Show HN: Stepped Actions – distributed workflow orchestration for Rails
2 months ago
- #ActiveJob
- #Workflow
- #Rails
- Stepped是一个Rails引擎,用于将复杂工作流编排为动作树结构
- 每个动作都会被持久化,通过Active Job运行,并能派生出更多子动作
- 该引擎从Envirobly项目中抽离,用于处理应用部署等任务(如DNS配置、重试机制和健康检查)
- 动作树允许定义包含多步骤的根动作,每个步骤仅当其所有动作完成时才会结束
- 模型(Models)是Stepped中的执行主体,可在所有模型上定义和运行动作
- 并发通道(concurrency_key)确保相同键值的动作按序执行
- 通过校验和实现复用机制,可跳过已完成工作或共享动作
- 外发完成机制使动作持续执行,直到外部事件显式触发完成
- 安装步骤:添加gem包→执行迁移→在模型上定义动作
- 支持同步(*_now)和异步(*_later)两种执行方式
- 步骤可派发新动作、设置等待间隔或主动触发失败
- 前后回调支持参数修改或在特定阶段执行代码
- 可覆盖并发键以实现跨记录/跨动作的协调
- 死锁防护:将试图加入祖先并发通道的动作标记为死锁状态
- 校验和复用:成功记录存储于Stepped::Achievement
- 外发动作持续执行直至显式完成(适用于webhook或外部系统)
- Job型动作视为外发动作,完成后必须调用action.complete!
- 支持超时设置,超时动作会导致父步骤失败
- 可配置异常处理,将动作标记为失败而非抛出异常
- Stepped::TestHelper提供测试支持:排空动作树/处理外发动作
- 本gem采用MIT开源协议