Sidekiq, utilisant elasticache, ne traite pas les tâches mises en file d'attente depuis la mise à niveau de discourse

J’ai récemment mis à niveau mon instance Docker de Discourse fonctionnant sur une Ubuntu EC2. J’ai utilisé la commande launcher rebuild pour effectuer la mise à niveau. J’avais auparavant la version 2.4.0 et je suis passé à la version 2.6.0.beta1 (j’ai également effectué une nouvelle mise à niveau vers la version 2.6.0.beta2). J’utilise ElastiCache à la place de Redis, et cela fonctionnait sans problème avant la mise à niveau. Immédiatement après la mise à niveau, j’ai remarqué que Sidekiq n’envoyait plus d’e-mails. J’ai redémarré l’application et vidé le cache, et cela semblait fonctionner, mais c’était un faux positif.

Indications observées de dysfonctionnement

  • Sidekiq planifie et met en file d’attente des tâches à un rythme raisonnablement stable (comme indiqué dans le tableau de bord Sidekiq), mais il n’en exécute aucune.
  • La page d’administration signale que Sidekiq ne fonctionne pas.
  • Les journaux montrent plusieurs occurrences de Sidekiq heartbeat test failed, restarting.
  • Bien sûr : les e-mails ne sont pas envoyés aux utilisateurs.

Choses que j’ai essayées (après avoir lu des publications ici et sur Stack Overflow)

  • Envoi réussi d’un e-mail de test avec discourse-doctor pour vérifier que cette partie du flux fonctionne.
  • Vérification sur le tableau de bord Sidekiq que le pied de page affiche bien la bonne instance ElastiCache .
  • Vérification que les journaux Docker ne signalent aucune erreur (ok: run: redis: (pid XX) 0s).
  • Vidage du cache et redémarrage de Discourse (./launcher restart app).
  • Arrêt de l’application, vidage du cache, puis redémarrage de l’application.
  • Reconstruction de l’application.

Étapes que je n’ai pas essayées

  • Création d’une nouvelle instance ElastiCache.
  • Mise en veille de cette installation et création d’une nouvelle instance propre.

Quelqu’un a-t-il rencontré ce problème et aurait-il des suggestions ?
Y a-t-il des journaux que j’aurais manqués ?
Existe-t-il un moyen de forcer Sidekiq à traiter ses tâches ?

À un moment donné, Discourse a commencé à exiger Redis 5. Je crois savoir quelle version de Redis votre ElasticCache prend en charge ? Il me semblait y avoir un message clair dans les journaux, mais je pourrais me tromper.

Je vais vérifier mon site qui utilise ElasticCache pour m’assurer que je ne rencontre pas de problème. Je suis assez certain que ce site utilise ElasticCache.

C’est une information utile, merci. Je suis sur la version 3 de Redis, il semble donc que je vais devoir faire une mise à jour ce soir.

Je pensais qu’il y avait un message clair dans les journaux

Il est aussi tout à fait possible que je ne regarde pas les bons journaux. Ni /logs ni ./launcher logs app ne donnent la moindre indication à ce sujet, alors peut-être devrais-je chercher ailleurs ?

/var/discourse/shared/logs/rails/production.log

si ma mémoire et mes doigts fonctionnaient.

Très proche. Je l’ai trouvé ici :

/var/discourse/shared/web-only/log/rails/production.log

Un message très clair, une fois que je l’ai trouvé :+1:t2::

Vous vous connectez à Redis v3.2.10, Sidekiq nécessite Redis v4.0.0 ou supérieur

J’ai passé à Redis 5 et il a traité ma file d’attente en attente. Tout est bon maintenant ! Merci !