Solid Queue : Tâches de Fond Sans Redis
Bienvenue dans ce troisième article dans la série sur le Triumvirat "Solid" dans Rails 8 ! Aujourd'hui on parle de Solid Queue. La SOLUTION dont vous ne pourrez plus vous passer pour créer des tâches de fond simplement.
- Envoyer un email automatique ? ✅ Check.
- Dès qu’un utilisateur s’inscrit, Solid Queue prend le relais pour envoyer un email de bienvenue sans ralentir la réponse HTTP.
- Générer un PDF en arrière-plan ? ✅ Check.
- Besoin d’un rapport ou d’une facture ? Le job est lancé en tâche de fond, et le fichier est prêt quand l’utilisateur revient.
- Synchroniser des données avec une API externe ? ✅ Check.
- Une mise à jour de profil déclenche un job qui envoie les infos à un CRM ou un outil marketing.
- Nettoyer les anciennes sessions ou fichiers temporaires ? ✅ Check.
- Un job planifié chaque nuit garde votre base propre et légère.
- Importer un fichier CSV volumineux ? ✅ Check.
- L’utilisateur téléverse un fichier ? Solid Queue le traite ligne par ligne sans faire exploser le serveur.
- Planifier des rappels ou des relances ? ✅ Check.
- Grâce à l’ordonnancement des jobs, vous pouvez envoyer un rappel 24h avant un événement.
Vous pouvez faire tellement de chose que ça en donne le tournis ! De l'installation à la configuration jusqu'à son utilisaiton. Solid Queue n'aura plus de secret pour vous !
N'hésitez pas à parcourir mes autres articles sur le sujet Triumvirat "Solid" qui n'aura plus de secret pour vous !
- "Solid Cache" : Ne plus dépendre de Redis pour le cache dans Rails
- "Solid Cable" : Des websockets et du temps réel simplement et sans prise de tête
- "Solid Queue" : Des taches de fonds à la sauce Rails (vous êtes ici)
- Le triumvirat appliqué à un projet complet
Accrochez ça va être du solide :)
Focus sur Solid Queue
Qu'est-ce qu'un Job de Fond ?
Les jobs de fond (ou background jobs) sont des tâches qui prennent du temps et qu'on ne veut pas exécuter pendant la requête HTTP de l'utilisateur. Sinon on bloquerait l'application ou on aurait en retour une erreur "timeout" nous expliquant que le serveur qu'on a interroger à mis trop de temps à répondre.
Exemples classiques :
- Envoyer un email de bienvenue après inscription
- Générer un rapport PDF complexe
- Traiter une image uploadée
- Synchroniser des données avec une API externe
- Nettoyer des anciennes données
Sans background jobs :
Avec background jobs :
Solid Queue : Comment ça fonctionne ?
Solid Queue est un système de gestion de jobs basé sur votre base de données, utilisant Active Job (l'interface standard de Rails pour les background jobs).
L'architecture
Solid Queue crée plusieurs tables dans votre base :
Les composants clés
1. Workers (Travailleurs) Les workers sont les processus qui exécutent réellement vos jobs. Ils interrogent régulièrement la table solid_queue_ready_executions pour trouver du travail.
2. Dispatchers (Répartiteurs) Les dispatchers déplacent les jobs de solid_queue_scheduled_executions vers solid_queue_ready_executions quand leur moment d'exécution arrive.
3. Scheduler (Planificateur) Le scheduler gère les tâches récurrentes (comme les cron jobs).
La magie : FOR UPDATE SKIP LOCKED
Solid Queue utilise une fonctionnalité SQL avancée appelée FOR UPDATE SKIP LOCKED qui permet à plusieurs workers de lire la même table simultanément sans se bloquer mutuellement.
Ce qui se passe :
- Worker 1 prend le job A et le verrouille
- Worker 2 essaie de prendre un job
- Au lieu d'attendre que Worker 1 finisse (LOCKED), il saute le job A (SKIP LOCKED) et prend le job B
- Résultat : zero blocage, performance maximale !
Installation et Configuration
Sur Rails 8
Solid Queue est activé par défaut ! Vérifiez simplement votre configuration.
Configuration dans config/solid_queue.yml
Exemples Pratiques
Exemple 1 : Job Simple - Envoyer un Email
Exemple 2 : Job Schedulé - Envoyer plus tard
Exemple 3 : Tâches Récurrentes (Cron Jobs)
Exemple 4 : Job avec Gestion d'Erreurs
Exemple 5 : Contrôle de Concurrence
Solid Queue permet de limiter combien de jobs d'un certain type peuvent s'exécuter simultanément.
Cas d'usage : Si vous avez 10 rapports à générer, seulement 3 s'exécuteront en parallèle. Les 7 autres attendront qu'un slot se libère.
Exemple 6 : Job avec Progress
Démarrer le Worker
En développement
Rails 8 utilise Puma avec un plugin Solid Queue :
Avec bin/dev, tout démarre automatiquement !
En production
Option 1 : Processus séparé
Option 2 : Avec Kamal/Docker
Option 3 : Systemd
Mission Control : L'Interface d'Administration
Rails 8 peut utiliser Mission Control - Jobs, une interface web pour monitorer vos jobs. C'est hyper pratique donc je vous conseille vivement de l'installer si vous utilisez Solid Queue.

Installation
Configuration
Mission Control vient avec une authentification HTTP basique. La configuration se fait via les crédentials de Rails :
Mais si vous utilisez un système d'authentification comme Devise, autant "nester" la route de Mission Control avec comme par exemple avec un rôle d'administrateur :
Il faut bien entendu que votre modèle utilisateur possède une colonne booléen "admin" et une méthode admin?
Accédez à http://localhost:3000/jobs pour voir :
- Jobs en cours
- Jobs échoués avec stack traces
- Historique des jobs
- Statistiques de performance
- Possibilité de réessayer les jobs échoués
Monitoring et Debugging
Vérifier les jobs dans la console
Logs utiles
Solid Queue vs Autres Solutions
|
Solution
|
Vitesse
|
Features
|
Setup
|
Dépendances
|
|---|---|---|---|---|
|
Solid Queue
|
Bonne
|
Riches
|
Très simple
|
Aucune
|
|
Sidekiq
|
Excellente
|
Très riches
|
Simple
|
Redis
|
|
GoodJob
|
Bonne
|
Riches
|
Simple
|
Aucune
|
|
Resque
|
Moyenne
|
Basiques
|
Simple
|
Redis
|
|
DelayedJob
|
Lente
|
Basiques
|
Très simple
|
Aucune
|
Utilisez Solid Queue si :
- Vous démarrez avec Rails 8
- Vous voulez zéro dépendance externe
- Vos besoins sont standards (80% des apps)
- Vous avez quelques milliers de jobs par heure
Passez à Sidekiq si :
- Vous avez des dizaines de milliers de jobs par heure
- Vous avez besoin de fonctionnalités avancées, comme des jobs async
- La performance est critique
Considérez GoodJob si :
- Vous voulez les avantages de Solid Queue
- Mais avec une interface d'admin encore plus poussée
Conclusion : Solid Queue, la simplicité au service de la performance
Solid Queue marque une évolution naturelle dans l’écosystème Rails : une solution de gestion de jobs asynchrones qui mise sur la simplicité, la robustesse et l’intégration native. Fini les dépendances externes comme Redis ou Sidekiq : avec une base SQL et une configuration minimaliste, Solid Queue permet de gérer les tâches en arrière-plan avec élégance et efficacité.
Que ce soit pour envoyer des emails, générer des rapports, ou orchestrer des workflows complexes, Solid Queue s’impose comme un allié fiable pour les développeurs Rails. Et avec Rails 8 qui l’intègre en standard, il est temps de repenser la manière dont on conçoit les traitements asynchrones.
🚀 Moins de friction, plus de productivité. Solid Queue, c’est le futur du background processing dans Rails.
