Sidekiq ne traite pas la file d'attente

quelles sont les raisons possibles Sidekiq d'empêcher le traitement des travaux dans la file d'attente? La file d'attente est pleine. Le fichier journal sidekiq.log indique aucune activité. Ainsi, la file d'attente est pleine, mais le journal est vide, et Sidekiq ne semble pas éléments de processus. Il semble qu'aucun travailleur des travaux de traitement. Redémarrer Redis ou le rincer avec FLUSHALL ou FLUSHDB comme aucun effet. Sidekiq a commencé avec

bundle exec sidekiq-l log/sidekiq.log

et produit le fichier journal suivant:

2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop

Comment savoir ce qui a mal tourné? Y sont cachés les fichiers journaux?

43
demandé sur 0x4a6f4672 2013-05-30 16:19:00

4 réponses

la raison en était dans notre cas: Sidekiq peut chercher la mauvaise file d'attente. Par défaut, Sidekiq utilise une file d'attente appelée "default". Nous avons utilisé deux noms de file d'attente différents, et les avons définis dans config/sidekiq.yml

# configuration file for Sidekiq
:queues:
  - queue_name_1
  - queue_name_2

le problème est que ce fichier de configuration n'est pas automatiquement chargé par défaut dans votre environnement de développement (contrairement à database.yml ou thinking_sphinx.yml par exemple) par une simple commande bundle exec sidekiq . Ainsi, nous avons écrit nos emplois dans deux files d'attente déterminées, et Sidekiq attendait des jobs Dans une troisième File (la file par défaut). Vous devez passer le chemin vers le fichier de configuration comme paramètre à travers l'option -C ou --config :

bundle exec sidekiq -C ./config/sidekiq.yml

ou vous pouvez passer les noms de file d'attente directement (aucun espace autorisé ici après la virgule):

bundle exec sidekiq -q queue_name_1,queue_name_2

Pour trouver le problème, il est utile de passer l'option -v ou --verbose à la ligne de commande, ou à l'utilisation :verbose: true dans le fichier sidekiq.yml . Tout ce qui est défini dans un fichier de configuration est bien sûr inutile si le fichier de configuration n'est pas chargé.. Par conséquent, assurez-vous d'utiliser d'abord le bon fichier de configuration.

108
répondu 0x4a6f4672 2013-05-30 13:30:45

dans le cas où vous n'êtes pas sûr des noms de vos Files d'attente, vous pouvez le comprendre avec le script suivant:

require "sidekiq/api"
stats = Sidekiq::Stats.new
stats.queues
# {"production_mailers"=>25, "production_default"=>1}

alors, vous pouvez faire des choses avec les files d'attente:

queue = Sidekiq::Queue.new("production_mailers")
queue.count
queue.clear
5
répondu Edgar Ortega 2016-08-29 19:26:50

je viens d'avoir ce problème. S'avère que j'avais fait une erreur de syntaxe dans mon sidekiq.yml

1
répondu jellymann 2017-03-04 19:23:38

je me cognais la tête contre un mur de briques pendant un moment, mon problème était que sidekiq avait besoin d'une nouvelle version de redis-server. J'ai lancé "bundle exec sidekiq" et ça a révélé l'erreur. Une fois que j'ai mis à jour vers une nouvelle version de redis-server, c'était parfait.

-2
répondu Elliott 2016-04-27 12:57:52