Je viens de passer à la version 2.6.0.beta5 (7fa6aca9db) cet après-midi, et mon tableau de bord m’alerte sur des tâches échouées :
3 tâches d’envoi d’e-mails ont échoué. Vérifiez votre fichier app.yml et assurez-vous que les paramètres du serveur de messagerie sont corrects. Voir les tâches échouées dans Sidekiq.
Je ne constate qu’aucun e-mail (*) n’a été envoyé, et que des tâches Sidekiq sont en statut de réessai :
J’ai essayé de tester l’envoi d’e-mails via l’aperçu du résumé, mais cela génère une erreur :
Erreur serveur
lors du chargement de /admin/email/preview-digest.json
Code d'erreur : 500
Mon fichier app.yml n’a pas changé. J’utilise Mailgun, et tout fonctionnait parfaitement avant la mise à jour.
(*) Édito : une douzaine de résumés ont bien été envoyés, mais il est indiqué : « 265 tâches d’envoi d’e-mails ont échoué. » Il semble que l’échec dépende du contenu du résumé.
Je pense qu’une valeur de données semble être nil ou vide alors qu’elle ne devrait pas l’être — ou cela ne devrait pas avoir d’importance. Voici deux traces d’erreur extraites des journaux, l’une pour l’aperçu et l’autre pour le job Sidekiq, je crois :
/var/www/discourse/lib/pretty_text.rb:440:in `block in strip_secure_media'
nokogiri-1.10.10/lib/nokogiri/xml/node_set.rb:238:in `block in each'
nokogiri-1.10.10/lib/nokogiri/xml/node_set.rb:237:in `upto'
nokogiri-1.10.10/lib/nokogiri/xml/node_set.rb:237:in `each'
/var/www/discourse/lib/pretty_text.rb:434:in `strip_secure_media'
/var/www/discourse/lib/email/styles.rb:347:in `replace_secure_media_urls'
/var/www/discourse/lib/email/styles.rb:281:in `to_html'
/var/www/discourse/lib/email/renderer.rb:31:in `html'
/var/www/discourse/lib/email/sender.rb:70:in `send'
/var/www/discourse/app/jobs/regular/user_email.rb:70:in `send_user_email'
/var/www/discourse/app/jobs/regular/user_email.rb:25:in `execute'
/var/www/discourse/app/jobs/base.rb:232:in `block (2 levels) in perform'
rails_multisite-2.5.0/lib/rails_multisite/connection_management.rb:76:in `with_connection'
/var/www/discourse/app/jobs/base.rb:221:in `block in perform'
/var/www/discourse/app/jobs/base.rb:217:in `each'
/var/www/discourse/app/jobs/base.rb:217:in `perform'
sidekiq-6.1.2/lib/sidekiq/processor.rb:196:in `execute_job'
sidekiq-6.1.2/lib/sidekiq/processor.rb:164:in `block (2 levels) in process'
sidekiq-6.1.2/lib/sidekiq/middleware/chain.rb:138:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:138:in `call'
sidekiq-6.1.2/lib/sidekiq/middleware/chain.rb:140:in `block in invoke'
sidekiq-6.1.2/lib/sidekiq/middleware/chain.rb:143:in `invoke'
sidekiq-6.1.2/lib/sidekiq/processor.rb:163:in `block in process'
sidekiq-6.1.2/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/job_retry.rb:111:in `local'
sidekiq-6.1.2/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq.rb:38:in `block in <module:Sidekiq>'
sidekiq-6.1.2/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/processor.rb:257:in `stats'
sidekiq-6.1.2/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/job_logger.rb:13:in `call'
sidekiq-6.1.2/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
sidekiq-6.1.2/lib/sidekiq/job_retry.rb:78:in `global'
sidekiq-6.1.2/lib/sidekiq/processor.rb:124:in `block in dispatch'
sidekiq-6.1.2/lib/sidekiq/logger.rb:10:in `with'
sidekiq-6.1.2/lib/sidekiq/job_logger.rb:33:in `prepare'
sidekiq-6.1.2/lib/sidekiq/processor.rb:123:in `dispatch'
sidekiq-6.1.2/lib/sidekiq/processor.rb:162:in `process'
sidekiq-6.1.2/lib/sidekiq/processor.rb:78:in `process_one'
sidekiq-6.1.2/lib/sidekiq/processor.rb:68:in `run'
sidekiq-6.1.2/lib/sidekiq/util.rb:15:in `watchdog'
sidekiq-6.1.2/lib/sidekiq/util.rb:24:in `block in safe_thread'
Non, média sécurisé est désactivé (ce qui est la valeur par défaut).
Pour information, je vois que autoriser l'intégration d'images dans les e-mails via média sécurisé est activé, mais c’est également la valeur par défaut.
@martin, pourquoi appelons-nous replace_secure_media_urls inconditionnellement ? Peut-on ajouter une condition de garde qui vérifie les médias sécurisés ?
Juste pour noter : ma mise à jour a échoué lors de son exécution depuis le navigateur, j’ai donc procédé à une reconstruction depuis la ligne de commande.
(Au cas où cela signifierait que cette installation se trouve dans un état différent par rapport à une installation mise à jour avec succès. J’ai un autre forum sur un autre serveur, qui a été mis à jour avec succès et qui ne rencontre pas de problèmes pour envoyer des e-mails ou préparer un aperçu du résumé.)
J’espère que @martin (ou quelqu’un d’autre) annulera l’une ou l’autre des modifications mentionnées plus haut, ou ajoutera la protection suggérée par @Falco.
Je me demande si cela pourrait être une solution de contournement : si le problème concerne la gestion de (certaines) images dans les emails de résumé, et si nous sommes d’accord pour envoyer temporairement des résumés sans images, nous pouvons définir short email length sur un nombre très élevé, afin que strip images from short emails supprime toutes les images.
Édition : non, j’ai essayé et les tâches Sidekiq continuent de s’accumuler. Aucun email n’a été envoyé pendant l’expérience, malgré de nombreuses exécutions répétées des tâches.