igmarin/rails-agent-skills

implement-background-job

Use when adding or reviewing an Active Job / Sidekiq / Solid Queue worker.

查看源码

使用方法

  1. 复制安装命令,在自己的智能体环境安装前先检查源码包。
  2. 从原始文档核对所需工具、凭据和支持的宿主。
  3. 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/igmarin/rails-agent-skills --skill implement-background-job

开始前需了解

  • 安装不包含模型订阅、API 额度或访问文件的权限。
  • 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
仓库原始内容

按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。

Implement Background Job

Apply the execution contract before this procedure.

Use this skill when the task is to add, configure, or review background jobs in a Rails application.

HARD-GATE

text
EVERY job MUST have its test written and validated BEFORE implementation:
  1. Write the job spec (idempotency, retry, error handling)
  2. Run the spec — verify it fails
  3. ONLY THEN write the job class

The authoritative perform contract — EVERY perform method does exactly three things:
  1. Load the record from the passed ID
  2. Guard for idempotency / permanent no-op conditions
  3. Delegate the side effect or orchestration to a service object

If perform needs more than that, extract a service.
EVERY job that performs a side effect (charge, email, API call) MUST have
an idempotency check BEFORE the side effect.

Core Rules

AspectRule
ArgumentsPass IDs, not objects
Retriesretry_on (explicit attempts:) for transient; discard_on for permanent errors
Backend (Rails 8)Solid Queue (database-backed, no Redis)
Backend (Rails 7)Sidekiq + Redis for high throughput
Recurringconfig/recurring.yml (Solid Queue) or cron/sidekiq-cron
Anti-patternsNo ActiveRecord objects as args; no :inline/:async in production; no business logic in perform

Core Process

  1. Write the job spec first — idempotency, retry, and error handling — and run it to confirm it fails.
  2. Write the job class following the perform contract in HARD-GATE.
  3. Add retry_on with explicit attempts: limit and discard_on for at least one permanent error.
  4. Run the full test suite.
  5. Enqueue or perform the job twice — confirm the second run is a no-op.
  6. For recurring jobs, define them in config/recurring.yml (Rails 8) or the chosen scheduler config.

Extended Resources

Rails 8 vs Rails 7

AspectRails 7 and earlierRails 8
DefaultNo default; set queue_adapter (often Sidekiq)Solid Queue (database-backed)
Dev/test:async or :inlineSame
RecurringExternal (cron, sidekiq-cron)config/recurring.yml
DashboardThird-party (Sidekiq Web)Mission Control Jobs

Examples

Thin job with idempotency and retry:

ruby
class SendInvoiceReminderJob < ApplicationJob
  queue_as :default
  retry_on Net::OpenTimeout, wait: :polynomially_longer, attempts: 5
  discard_on ActiveRecord::RecordNotFound

  def perform(invoice_id)
    invoice = Invoice.find(invoice_id)
    return if invoice.reminder_sent_at?

    InvoiceReminders::Send.call(invoice:)
  end
end

Service owns the side effect and state update:

ruby
module InvoiceReminders
  class Send
    def self.call(invoice:)
      InvoiceMailer.overdue(invoice).deliver_now
      invoice.update!(reminder_sent_at: Time.current)
    end
  end
end
  • BACKENDS.md — Solid Queue vs Sidekiq setup, configuration details, and Redis requirements.

Load these files only when their specific content is needed:

  • [assets/job_patterns.md](assets/job_patterns.md) — Use when implementing multi-step orchestration or batch job patterns
  • [assets/retry_examples.md](assets/retry_examples.md) — Use when configuring retry_on/discard_on for specific error classes beyond the basic patterns above

Output Checklist

  • [ ] Backend decision stated (Rails version/scale → Solid Queue or Sidekiq)
  • [ ] Job spec shown first; command run; confirms failure before implementation
  • [ ] perform receives IDs, loads record, guards idempotency, delegates to service
  • [ ] retry_on with attempts: limit and discard_on for permanent error
  • [ ] Double-run verification confirms second run is a no-op
  • [ ] Recurring job (if any) defined in config/recurring.yml or scheduler config
  • [ ] If ops docs requested: record backend, retry, recurring schedule, and idempotency decisions in process_log.md

Integration

SkillWhen to chain
review-migrationSolid Queue uses DB tables; add migrations safely
security-checkJobs receive serialized input; validate like any entry point
write-testsTDD gate: write job spec before implementation; use perform_enqueued_jobs
create-service-objectKeep perform thin; call service objects for business logic

按任务相关推荐

来自同一仓库

更多 Skills

全部 Skills