Configurer et créer un job qui tournera en arrière plan avec Sidekiq
<aside> ✅ Pré-requis
<aside> ⚠️
Attention, Sidekiq n’est plu la manière recommandé pour faire des jobs. Il faut privilégier l’utilisation de Solid Queue. Voir le standard ‣
</aside>
<aside> ⌛ Temps indicatif : 0.5J
</aside>
Raison :
La configuration minimum pour utiliser Sidekiq
# config/application.rb
class Application < Rails::Application
# ...
config.active_job.queue_adapter = :sidekiq
end
Raison :
L’interface permet de fournir en direct plusieurs informations :
# config/initializers/sidekiq.rb
require "sidekiq/web"
Sidekiq.configure_server do |config|
config.logger.level = Rails.logger.level
end
Sidekiq.default_job_options = { "backtrace" => true }
# config/routes.rb
...
# il est possible de bloquer l'accès à l'interface Sidekiq
# via Devise comme l'exemple suivant
authenticate :compte, ->(c) { c.superadmin? } do
mount Sidekiq::Web => "/sidekiq"
end
app/jobs/*_job.rb_job.rbJobRaison :
La convention Rails des jobs
# app/jobs/mon_super_job.rb
# frozen_string_literal: true
class MonSuperJob < ApplicationJob
queue_as :default
def perform
# faites ce que vous voulez
end
end
# Pour utiliser le job :
# exécutera en direct le job sans passer par le serveur worker
MonSuperJob.perform_now
# exécutera en direct le job en passant par le serveur worker
MonSuperJob.perform_later
# on utilisera principalement la deuxième option
L’option concurrency permet de déterminer le nombre de job pouvant être exécuté simultanément
L’option queues permet de définir l’ensemble des queues possible pour les jobs
Vous pouvez créer n’importe quel nom de queue
Définir les queues active_storage_analysis et active_storage_purge seulement si vous utilisez ActiveStorage.
Raison :
# config/sidekiq.yml
---
:concurrency: <%= ENV.fetch("SIDEKIQ_CONCURRENCY", 15).to_i %>
# Les chiffres à coté de la queue détermine l'importance
# plus le chiffre est haut plus c'est important.
:queues:
- ["default", 2]
- ["mailers", 2]
- ["active_storage_analysis", 1]
- ["active_storage_purge", 1]