finds.dev

tobi/delayed_job

Database backed asynchronous priority queue -- Extracted from Shopify

View on GitHubHomepage ↗

★ 2,176RubyMITupdated Nov 2020

// the take

A database-backed asynchronous job queue extracted directly from Shopify's early Rails codebase. It's for Ruby/Rails teams who want background job processing (newsletters, image resizing, batch imports) without standing up Redis or a message broker — jobs are rows in a delayed_jobs table that worker processes poll and run.

Uses your existing database as the queue, so there's no extra infrastructure to run or monitor beyond what you already have. Locking via locked_at/locked_by lets multiple workers run against the same table safely. Jobs are plain Ruby objects with a perform method — no DSL, easy to reason about. Failure handling has a sensible default: exponential-ish backoff (5 + N^4 seconds) with a capped retry count before giving up.

Jobs are serialized to YAML and stored in a text column, then deserialized on load — YAML.load on untrusted or attacker-influenced data is a known RCE vector in Rails apps, and this gem's whole design depends on it. Last pushed in November 2020, so there's no guarantee it works cleanly with modern Rails/Ruby versions, and nobody is fixing bugs or security issues in it now. It's polling-based with a minimum 5-second check interval per worker, which means real latency on job pickup and wasted DB queries as you add workers — it doesn't scale the way a proper broker would. There's no dashboard or introspection tooling; checking queue depth or stuck jobs means querying the table directly or writing your own tooling, unlike Sidekiq/Resque which ship a web UI.

We read the README, the directory tree and a key source file in October 2026. Nobody pays to be listed. How we judge →

// at a glance

Stars
2,176
Forks
1,235
Language
Ruby
License
MIT
Last commit
7 Nov 2020

// nearby

If delayed_job isn't quite it.

All repos →