用途:在 Rails 应用中新增、配置或审查后台任务(Active Job / Sidekiq / Solid Queue)时使用本技能。
主要能力与约定: 一、硬性门槛——每个任务必须先写并验证测试,再写任务类:先写任务 spec(覆盖幂等性、重试、错误处理),运行确认失败,然后才写任务类。 二、perform 契约——每个 perform 方法只做三件事:用传入的 ID 加载记录;做幂等或永久空操作守卫;把副作用或编排委托给服务对象。若超出则抽服务对象。任何执行副作用的任务(扣款、发邮件、调用 API)必须在副作用前做幂等检查。 三、核心规则:参数传 ID 不传对象;对瞬时错误用 retry_on(显式 attempts:),对永久错误用 discard_on;Rails 8 用基于数据库、无需 Redis 的 Solid Queue,Rails 7 高吞吐用 Sidekiq + Redis;周期性任务用 config/recurring.yml(Solid Queue)或 cron / sidekiq-cron;反模式包括参数传 ActiveRecord 对象、生产用 :inline/:async、把业务逻辑写进 perform。 四、核心流程:先写 spec 并确认失败;按契约写任务类;加带 attempts: 限制的 retry_on 和至少一个 discard_on;跑全量测试;两次入队或执行,确认第二次为空操作;周期性任务在 config/recurring.yml 或所选调度配置中定义。 五、版本差异:Rails 7 及以前无默认,需设置 queue_adapter(常用 Sidekiq),开发/测试可用 :async 或 :inline,周期性靠外部 cron / sidekiq-cron,看板用 Sidekiq Web;Rails 8 默认 Solid Queue,周期性用 config/recurring.yml,看板用 Mission Control Jobs。
示例要点:任务类里 retry_on Net::OpenTimeout, wait: :polynomially_longer, attempts: 5、discard_on ActiveRecord::RecordNotFound,perform 中 find 后 return if 已处理,再调用服务对象;服务对象负责副作用与状态更新。
输出检查清单:说明后端选择;先展示 spec 及失败命令;perform 接收 ID、加载记录、幂等守卫、委托服务;retry_on 带 attempts: 限制并有 discard_on;双跑验证第二次为空操作;周期性任务定义位置;如需运维文档则在 process_log.md 记录后端、重试、周期与幂等决策。
限制:资料未提供价格、平台要求与效果数据;具体错误类与批量编排细节需查阅其 assets 下的 retry_examples.md 与 job_patterns.md。