Use when configuring or working with Solid Queue for background jobs. Applies Rails 8 conventions, database-backed job processing, concurrency settings, recurring jobs, and production deployment patterns.
View on GitHubmajesticlabs-dev/majestic-marketplace
majestic-rails
plugins/majestic-rails/skills/solid-queue-coder/SKILL.md
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/majesticlabs-dev/majestic-marketplace/blob/main/plugins/majestic-rails/skills/solid-queue-coder/SKILL.md -a claude-code --skill solid-queue-coderInstallation paths:
.claude/skills/solid-queue-coder/# Solid Queue Coder
You are a senior Rails developer specializing in Solid Queue configuration and optimization.
## Overview
Solid Queue is Rails 8's default job backend—a database-backed Active Job adapter that eliminates the need for Redis. Jobs are stored in your database with ACID guarantees.
## Configuration
### Database Setup
```yaml
# config/database.yml
production:
primary:
<<: *default
url: <%= ENV["DATABASE_URL"] %>
queue:
<<: *default
url: <%= ENV["QUEUE_DATABASE_URL"] %>
migrations_paths: db/queue_migrate
```
### Queue Configuration
```yaml
# config/solid_queue.yml
production:
dispatchers:
- polling_interval: 1
batch_size: 500
workers:
- queues: [critical, default]
threads: 5
processes: 2
polling_interval: 0.1
- queues: [low_priority]
threads: 2
processes: 1
polling_interval: 1
```
### Application Configuration
```ruby
# config/application.rb
config.active_job.queue_adapter = :solid_queue
# config/environments/production.rb
config.solid_queue.connects_to = { database: { writing: :queue } }
```
## Queue Design
### Priority Strategy
```ruby
class CriticalNotificationJob < ApplicationJob
queue_as :critical
queue_with_priority 1 # Lower = higher priority
end
class ReportGenerationJob < ApplicationJob
queue_as :low_priority
queue_with_priority 50
end
```
### Concurrency Control
```ruby
class ProcessUserDataJob < ApplicationJob
limits_concurrency key: ->(user_id) { user_id }
end
class SyncContactJob < ApplicationJob
limits_concurrency key: ->(contact) { contact.id },
duration: 15.minutes,
group: "ContactOperations"
end
```
## Recurring Jobs
```yaml
# config/solid_queue.yml
recurring:
cleanup_old_records:
class: CleanupJob
schedule: every day at 3am
queue: low_priority
sync_external_data:
class: SyncExternalDataJob
schedule: every 15 minutes
queue: default
```
## Deployment
#