Erreur interne du serveur 500 sur diverses routes

Bonjour,

Je tente de déboguer des erreurs 500 Internal Server Error récurrentes.
Voici d’abord la configuration (je sais que ce n’est pas idéal et ce n’est pas le déploiement recommandé avec Docker) :

  • discourse 2.3.8
  • ruby 2.7.2 (via le snap)
  • redis-server 5:4.0.9-1ubuntu0.2 (paquet Ubuntu)
  • postgresql 10.15 (sur un autre hôte)

J’ai édité le fichier config/environments/production.rb pour définir :

config.log_level = :debug

Un exemple du type d’erreur que nous rencontrons (mélangé avec des 200) est disponible ici (ainsi que le reste, car je ne peux pas mettre plus de deux liens dans un message) : Ubuntu Pastebin

J’ai essayé de déterminer si un type particulier de requête générait les erreurs 500, et il existe effectivement un certain modèle (voir le pastebin précédent).

Pour l’instant, je ne parviens pas à trouver un moyen de déboguer davantage.
Je ne suis pas tout à fait certain qu’il s’agisse d’un bug, et je n’ai malheureusement aucun moyen de reproduire le problème. Ces erreurs surviennent de manière aléatoire dans la journée, entre des réponses 200. Cela pourrait être un problème de verrouillage ou de contention, mais sans logs supplémentaires, je ne suis pas vraiment en mesure de localiser la source du problème.

Voici les limites actuellement utilisées pour le processus, au cas où cela serait la cause : Ubuntu Pastebin

Toute aide pour poursuivre le débogage serait grandement appréciée.

Cordialement,

Discourse 2.3.8 est très ancien et ne fonctionnera pas avec une version récente de Ruby comme 2.7.2.

Nous savons que Discourse 2.5.6, 2.6 et 2.7 sont compatibles avec Ruby 2.7.2.

Bonjour Rafael,

Merci pour votre réponse. Nous prévoyons de faire la mise à niveau et d’utiliser la méthode de déploiement prise en charge, certainement « bientôt ».

Je cherchais surtout à savoir comment augmenter les messages de débogage, au-delà de la modification du fichier config/environments/production.rb.

J’ai vu que logster (Discourse Logging Improvements) pourrait être utilisé, mais il ne fournit rien d’utile dans notre cas (il me manque les secondes pour voir si cela est lié à mon erreur 500 ou non) et il y a trop d’erreurs, probablement liées à cette incompatibilité entre les versions de Ruby et de Discourse.

Je vais essayer de creuser un peu plus, mais je pousse clairement pour une mise à niveau « plus tôt » que « bientôt » :).

Merci !