Copilot instructions
.github/instructions/rails-background-jobs.instructions.mdRails Background Jobs Guide (Solid Queue)
Copilot instructions
Quality
63/100
Scores the file, not the repository.Length
803 words
22 headings · 0 code blocksRepository
54
— · pushed 410 days agoLast changed
3 days ago
First indexed 3 days ago.123456# Rails Background Jobs Guide (Solid Queue)78## Core Philosophy910- Use database-backed queuing for simplicity and reliability11- Avoid external dependencies like Redis when possible12- Design jobs to be idempotent and retryable13- Keep background processing simple and focused14- Leverage Rails' built-in Active Job framework1516## Solid Queue Principles1718- Database-backed job storage using FOR UPDATE SKIP LOCKED19- No external dependencies required for basic operation20- Built-in support for priorities, concurrency limits, and recurring jobs21- Seamless integration with Active Job interface22- Production-ready performance with PostgreSQL or MySQL2324## Configuration Strategy2526- Use separate database for queue in high-volume production environments27- Configure workers based on job priorities and server resources28- Set appropriate polling intervals for job urgency29- Design thread counts based on database connection limits30- Monitor queue depth and processing times3132## Queue Organization3334- Design queues based on priority and processing requirements35- Use semantic queue names that indicate purpose36- Configure dedicated workers for high-priority queues37- Set appropriate concurrency limits per queue type38- Use wildcards sparingly - prefer explicit queue names3940## Job Design Principles4142- Make all jobs idempotent - safe to run multiple times43- Keep jobs small and focused on single tasks44- Pass simple arguments - prefer IDs over objects45- Design for eventual consistency46- Handle failures gracefully with proper error reporting4748## Error Handling Strategy4950- Configure retry behavior based on job importance51- Use exponential backoff for transient failures52- Discard jobs that cannot succeed after retries53- Log errors with sufficient context for debugging54- Monitor failed job patterns for system issues5556## Concurrency Controls5758- Use `limits_concurrency` to prevent resource exhaustion59- Define concurrency keys based on resource constraints60- Set appropriate duration for concurrency locks61- Group related jobs with concurrency controls62- Monitor for concurrency bottlenecks6364## Recurring Jobs6566- Define recurring jobs in configuration, not code67- Use cron-like syntax for scheduling68- Keep recurring job logic simple and fast69- Monitor recurring job execution patterns70- Handle overlapping executions appropriately7172## Performance Optimization7374- Use exact queue names for better polling performance75- Configure batch sizes based on job characteristics76- Set polling intervals according to latency requirements77- Monitor database load from job queries78- Index job tables appropriately7980## Database Configuration8182- Use separate database for Solid Queue in production83- Configure appropriate connection pool sizes84- Set transaction isolation levels correctly85- Monitor database performance metrics86- Plan for job table maintenance8788## Worker Management8990- Use Puma plugin for integrated process management91- Configure supervisor for automatic restarts92- Set appropriate number of worker processes93- Monitor worker health and performance94- Handle graceful shutdowns properly9596## Job Arguments9798- Pass primitive types and simple data structures99- Avoid passing full ActiveRecord objects100- Use GlobalID for model references101- Keep argument size reasonable102- Version job arguments for backwards compatibility103104## Testing Strategy105106- Test job logic separately from queueing107- Use perform_now in tests for synchronous execution108- Test retry and failure scenarios109- Verify idempotency with multiple executions110- Mock external dependencies appropriately111112## Monitoring Best Practices113114- Track job queue depth and latency115- Monitor job success/failure rates116- Alert on queue backlogs117- Track job execution times118- Monitor worker resource usage119120## Deployment Considerations121122- Use Kamal for container-based deployments123- Configure health checks for workers124- Implement zero-downtime deployments125- Handle long-running jobs during deploys126- Monitor deployment impact on queues127128## Migration Strategy129130- Plan migration from other queue backends carefully131- Run both systems in parallel during transition132- Migrate jobs gradually by type133- Monitor for issues during migration134- Have rollback plan ready135136## Debugging Techniques137138- Use Rails console to inspect job state139- Query job tables directly when needed140- Add structured logging to jobs141- Use APM tools for job performance142- Track job execution paths143144## Lifecycle Hooks145146- Use Solid Queue callbacks for monitoring147- Track job state transitions148- Implement custom instrumentation149- Monitor for stuck jobs150- Alert on abnormal patterns151152## Best Practices153154- Keep jobs simple and focused155- Design for failure and retry156- Monitor everything important157- Document job behavior clearly158- Test edge cases thoroughly159160## Common Patterns161162- Email delivery jobs with rate limiting163- Report generation with progress tracking164- Data import/export with chunking165- Webhook processing with retries166- Scheduled maintenance tasks167168## Anti-Patterns to Avoid169170- Long-running jobs without heartbeats171- Jobs that modify shared state unsafely172- Recursive job spawning without limits173- Jobs with external dependencies in transactions174- Overly complex job orchestration175176Remember: Solid Queue brings reliability and simplicity to background processing. Use it to keep your application responsive while handling work asynchronously.177
Also in levifig/rails-instructions
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| levifig/rails-instructions.github/instructions/rails-core.instructions.md · 54 | Copilot instructions | teststylearchtesting-strategy+5 | 68/100 | 3 days ago | |
| levifig/rails-instructions.cursor/rules/guidelines.mdc · 54 | Cursor rules | teststyletesting-strategysecurity+4 | 71/100 | 3 days ago | |
| levifig/rails-instructions.cursor/rules/rails-rules.mdc · 54 | Cursor rules | testlint-formatstylearch+9 | 84/100 | 3 days ago | |
| levifig/rails-instructions.github/copilot-instructions.md · 54 | Copilot instructions | teststyletesting-strategysecurity+4 | 71/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-api.instructions.md · 54 | Copilot instructions | testlint-formatstyletesting-strategy+7 | 67/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-controllers.instructions.md · 54 | Copilot instructions | teststylesecurityapi+1 | 56/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-deployment.instructions.md · 54 | Copilot instructions | setupstylesecuritydatabase+2 | 52/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-hotwire.instructions.md · 54 | Copilot instructions | teststylesecurityperformance+1 | 56/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-importmaps.instructions.md · 54 | Copilot instructions | teststylesecuritydatabase+2 | 56/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-mobile.instructions.md · 54 | Copilot instructions | styleuiperformance | 66/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-models.instructions.md · 54 | Copilot instructions | teststylearchtypes+4 | 60/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-performance.instructions.md · 54 | Copilot instructions | teststylegitdatabase+2 | 56/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-security.instructions.md · 54 | Copilot instructions | teststylesecuritydependencies+3 | 63/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-services.instructions.md · 54 | Copilot instructions | teststylearchtesting-strategy+4 | 75/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-styling.instructions.md · 54 | Copilot instructions | styledatabaseuiperformance+3 | 59/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-testing.instructions.md · 54 | Copilot instructions | teststyletesting-strategysecurity+2 | 56/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails-views.instructions.md · 54 | Copilot instructions | teststylearchsecurity+3 | 60/100 | 3 days ago | |
| levifig/rails-instructions.github/instructions/rails.instructions.md · 54 | Copilot instructions | testlint-formatstylearch+9 | 84/100 | 3 days ago |
Diff against .github/instructions/rails-core.instructions.md Diff against .cursor/rules/guidelines.mdc Diff against .cursor/rules/rails-rules.mdc Diff against .github/copilot-instructions.md Diff against .github/instructions/rails-api.instructions.md Diff against .github/instructions/rails-controllers.instructions.md Diff against .github/instructions/rails-deployment.instructions.md Diff against .github/instructions/rails-hotwire.instructions.md Diff against .github/instructions/rails-importmaps.instructions.md Diff against .github/instructions/rails-mobile.instructions.md Diff against .github/instructions/rails-models.instructions.md Diff against .github/instructions/rails-performance.instructions.md Diff against .github/instructions/rails-security.instructions.md Diff against .github/instructions/rails-services.instructions.md Diff against .github/instructions/rails-styling.instructions.md Diff against .github/instructions/rails-testing.instructions.md Diff against .github/instructions/rails-views.instructions.md Diff against .github/instructions/rails.instructions.md
