mcpField
S
solid-queue-coder

solid-queue-coder

github.com/majesticlabs-devDevelopment5048 installsUpdated 7w ago
Repository

About solid-queue-coder

A guidance skill for Rails developers configuring Solid Queue and designing jobs, covering databases, queues, concurrency, deployment, and error handling. It includes examples and maintenance advice for the Rails 8 default job backend.

Key features

  1. 01Database and queue configuration
  2. 02Job priority and concurrency controls
  3. 03Recurring job configuration
  4. 04Worker deployment examples
  5. 05Retries, discards, and maintenance guidance

Use cases

  1. 01Configuring Solid Queue for a Rails app
  2. 02Setting job priorities and concurrency limits
  3. 03Deploying queue workers
  4. 04Planning job error handling and database maintenance

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill solid-queue-coder

After installing, type/solid-queue-coderin Claude Code to confirm it loaded.

Details

From the project README

Solid Queue Coder

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
# config/database.yml
production:
  primary:
    <<: *default
    url: <%= ENV["DATABASE_URL"] %>
  queue:
    <<: *default
    url: <%= ENV["QUEUE_DATABASE_URL"] %>
    migrations_paths: db/queue_migrate
Queue Configuration
# 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
# 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
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
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

# 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

Procfile
web: bundle exec puma -C config/puma.rb
worker: bundle exec rake solid_queue:start
Docker Compose
services:
  web:
    command: bundle exec puma -C config/puma.rb
  worker:
    command: bundle exec rake solid_queue:start

Error Handling

class ExternalApiJob < ApplicationJob
  retry_on Net::OpenTimeout, wait: :polynomially_longer, attempts: 5
  discard_on ActiveJob::DeserializationError

  rescue_from StandardError do |exception|
    if executions >= 5
      FailedJob.create!(job_class: self.class.name, error_message: exception.message)
    else
      raise exception
    end
  end
end

Database Maintenance

namespace :queue do
  task vacuum: :environment do
    ActiveRecord::Base.connected_to(database: :queue) do
      %w[solid_queue_ready_executions solid_queue_claimed_executions].each do |table|
        ActiveRecord::Base.connection.execute("VACUUM ANALYZE #{table}")
      end
    end
  end
end

Solid Queue vs Sidekiq

FeatureSolid QueueSidekiq
InfrastructureDatabase onlyRequires Redis
ACID guaranteesYesNo
Transactional enqueueYesNo
Concurrency controlBuilt-inRequires sidekiq-unique-jobs

Anti-Patterns

Anti-PatternProblemSolution
Wildcard queue * in prodUnpredictable prioritySpecify queue order
Single databaseContention with appSeparate queue database
Too many threadsDatabase exhaustionMatch pool size

Output Format

When configuring Solid Queue, provide:

  1. Database Setup - Multi-database configuration
  2. Queue Config - solid_queue.yml settings
  3. Worker Setup - Procfile/Docker configuration
  4. Jobs - Example job classes with error handling

Comments

Markdown supported