Boîte de réception des messages utilisateur Erreur 500

Salut,

Nous rencontrons un comportement très étrange, mais pour le moment uniquement chez un seul utilisateur, lors de l’ouverture de la boîte de réception des messages.

Nous exécutons Discourse dans Docker derrière Apache avec ProxyPass. Discourse 2.6.0.beta3

Cet utilisateur ne peut pas ouvrir le volet des messages ; il y a une note indiquant « No Content » ou l’équivalent en anglais de « Keine Inhalte » — nous utilisons la version de.DE :wink:

Et lorsque l’utilisateur clique à nouveau sur l’icône des messages, disons lorsqu’il essaie d’ouvrir la boîte de réception, nous obtenons une erreur 500.

La page affiche : "error on loading: [/topics/private-messages/firstname.name.json]

Cela ne se produit que pour un utilisateur donné. Les autres n’ont pas ce problème.

Si l’utilisateur essaie https://domain.de/u/firstname.name/messages/sent ou https://domain.de/u/firstname.name/messages/group/any, tout fonctionne correctement.

Mais https://domain.de/u/firstname.name/messages/ ou https://domain.de/u/firstname.name/messages/inbox provoque une erreur 500.

Nous avons essayé de modifier les rôles de cet utilisateur, nous avons effectué des mises à jour et reconstruit l’application via le launcher. Malheureusement, l’erreur 500 persiste lors de l’ouverture de la boîte de réception.

Quelqu’un a-t-il déjà rencontré un tel comportement ? Que pouvons-nous faire ? Existe-t-il un moyen de reconstruire les messages ? Ou devons-nous les supprimer ?

Merci de nous donner quelques conseils, nous sommes actuellement perdus.

Merci d’avance !

J’ai remarqué quelque chose de similaire l’autre jour, avec un nom de groupe dans /topics/private-messages-group. Il s’est avéré qu’il y avait une recherche sensible à la casse, et le nom du groupe dans l’URL était entièrement en minuscules.

Pouvez-vous vérifier si cela se comporte différemment si vous modifiez la casse dans l’URL pour qu’elle corresponde à celle du nom d’utilisateur ? (par exemple https://domain.de/u/Firstname.Name/messages)

5 « J'aime »

Bonjour Richard,

Merci pour votre réponse rapide !

J’ai essayé de modifier la casse, comme vous l’avez suggéré :

  • …Firstname.Name…

J’ai également essayé différentes combinaisons :

  • …firstname.Name…
  • …Firstname.name…
  • …FIRSTNAME.NAME…

Mais l’erreur persiste.

J’ai essayé https://domain.de/u/Firstname.Name/messages/sent et d’autres routes, qui fonctionnent parfaitement, comme avant.

Auriez-vous des pistes à me suggérer ?

Je vous serais très reconnaissant de votre aide.

C’était déjà un peu un coup de poker, donc je crains de ne même pas pouvoir vous donner le moindre indice à ce sujet.

2 « J'aime »

Pas de problème, on ne sait jamais, n’est-ce pas ? Je suis ravi de toute aide.

Peut-être que quelqu’un d’autre peut ajouter quelque chose ?
Merci !

Bonjour,

J’espère vraiment que quelqu’un pourra nous aider avec notre problème. Comme l’a suggéré @RGJ, nous avons découvert que la situation semble être un peu plus complexe, mais nous n’avons pas encore pu résoudre le problème des boîtes de réception inaccessibles d’un seul utilisateur. Malheureusement, nous utilisons énormément les messages. Nous sommes organisés en petits groupes qui ont souvent besoin de communiquer de manière non publique. Par conséquent, les messages sont un moyen idéal pour cela.

Si vous avez besoin de plus d’informations, de logs, ou si vous savez exactement ce qu’il faut me fournir, faites-le-moi savoir et je les copierai ici.

Merci à tous pour vos conseils supplémentaires et pour avoir pris le temps de lire ce message :wink:

Avez-vous vérifié les journaux d’erreurs via le navigateur web lorsque vous êtes connecté en tant qu’administrateur ?

@codinghorror Merci beaucoup pour votre aide supplémentaire.

En fait, il y a une sortie d’erreur assez longue concernant cette requête. Mais je n’arrive pas à résoudre ce problème.

Je tente de fournir les informations de journalisation ici

Message (21 copies signalées)

NoMethodError (undefined method `downcase' for nil:NilClass)
app/models/global_setting.rb:107:in `s3_bucket_name'
app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'
lib/url_helper.rb:90:in `cook_url'
app/models/topic.rb:126:in `image_url'
app/serializers/listable_topic_serializer.rb:34:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:451:in `serialize_data'
app/controllers/application_controller.rb:460:in `render_serialized'
lib/topic_list_responder.rb:16:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:177:in `message_route'
app/controllers/list_controller.rb:164:in `block in generate_message_route'
app/controllers/application_controller.rb:351:in `block in with_resolved_locale'
app/controllers/application_controller.rb:351:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Backtrace

app/models/global_setting.rb:107:in `s3_bucket_name'
app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'
lib/url_helper.rb:90:in `cook_url'
app/models/topic.rb:126:in `image_url'
app/serializers/listable_topic_serializer.rb:34:in `image_url'
(eval):10:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:468:in `rescue in attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:455:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:124:in `block in serialize'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `map'
active_model_serializers (0.8.4) lib/active_model/serializer/associations.rb:123:in `serialize'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:368:in `block in include_associations!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `each_key'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:367:in `include_associations!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:362:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:343:in `as_json'
app/controllers/application_controller.rb:451:in `serialize_data'
app/controllers/application_controller.rb:460:in `render_serialized'
lib/topic_list_responder.rb:16:in `block (2 levels) in respond_with_list'
actionpack (6.0.3.3) lib/action_controller/metal/mime_responds.rb:214:in `respond_to'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:177:in `message_route'
app/controllers/list_controller.rb:164:in `block in generate_message_route'
actionpack (6.0.3.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.0.3.3) lib/abstract_controller/base.rb:195:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:112:in `block in run_callbacks'
app/controllers/application_controller.rb:351:in `block in with_resolved_locale'
i18n (1.8.5) lib/i18n.rb:313:in `with_locale'
app/controllers/application_controller.rb:351:in `with_resolved_locale'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:121:in `block in run_callbacks'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:139:in `run_callbacks'
actionpack (6.0.3.3) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `block in instrument'
activesupport (6.0.3.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.0.3.3) lib/active_support/notifications.rb:180:in `instrument'
actionpack (6.0.3.3) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (6.0.3.3) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
activerecord (6.0.3.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.0.3.3) lib/abstract_controller/base.rb:136:in `process'
actionview (6.0.3.3) lib/action_view/rendering.rb:39:in `process'
rack-mini-profiler (2.1.0) lib/mini_profiler/profiling_methods.rb:78:in `block in profile_method'
actionpack (6.0.3.3) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.0.3.3) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:49:in `block in serve'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.0.3.3) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.0.3.3) lib/action_dispatch/routing/route_set.rb:834:in `call'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.3) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.3) lib/rack/head.rb:12:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:336:in `call'
rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/cookies.rb:648:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.0.3.3) lib/active_support/callbacks.rb:101:in `run_callbacks'
actionpack (6.0.3.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
logster (2.9.4) lib/logster/middleware/reporter.rb:43:in `call'
railties (6.0.3.3) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.0.3.3) lib/rails/rack/logger.rb:28:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/request_id.rb:27:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
rack (2.2.3) lib/rack/method_override.rb:24:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
actionpack (6.0.3.3) lib/action_dispatch/middleware/host_authorization.rb:76:in `call'
rack-mini-profiler (2.1.0) lib/mini_profiler/profiler.rb:235:in `call'
message_bus (3.3.2) lib/message_bus/rack/middleware.rb:61:in `call'
lib/middleware/request_tracker.rb:176:in `call'
railties (6.0.3.3) lib/rails/engine.rb:527:in `call'
railties (6.0.3.3) lib/rails/railtie.rb:190:in `public_send'
railties (6.0.3.3) lib/rails/railtie.rb:190:in `method_missing'
rack (2.2.3) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.3) lib/rack/urlmap.rb:58:in `each'
rack (2.2.3) lib/rack/urlmap.rb:58:in `call'
unicorn (5.7.0) lib/unicorn/http_server.rb:632:in `process_client'
unicorn (5.7.0) lib/unicorn/http_server.rb:728:in `worker_loop'
unicorn (5.7.0) lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
unicorn (5.7.0) lib/unicorn/http_server.rb:144:in `start'
unicorn (5.7.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'

ENV

hostname config-app
process_id 273
application_version 891987a2843de3ebeed412e01fd6b8064dac3917
HTTP_HOST sub.domain..de
REQUEST_URI /topics/private-messages/firstname.name.json
REQUEST_METHOD GET
HTTP_USER_AGENT Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:81.0) Gecko/20100101 Firefox/81.0
HTTP_ACCEPT application/json, text/javascript, /; q=0.01
HTTP_REFERER https://sub.domain.de/u/firstname.name/messages
HTTP_X_FORWARDED_FOR 2003:d6:9720:2500:c4b4:5a78:fb34:fbe8, unix:
HTTP_X_REAL_IP unix:
username firstname.name
time 20:38

Bon, c’est beaucoup d’informations et je ne sais pas par où commencer. J’espère que cela pourra éclaircir notre problème. Si vous avez besoin d’informations supplémentaires, n’hésitez pas à me le faire savoir.

Merci beaucoup d’avoir pris le temps d’examiner cela !
MERCI

1 « J'aime »

Votre nom de bucket S3 est-il invalide ?

Merci pour votre réponse,

réponse courte : je ne sais pas, je ne pense pas.

Le nom du bucket S3 semble être lié aux systèmes de stockage Amazon S3, n’est-ce pas ? Si c’est le cas, il ne peut probablement pas être invalide. Nous n’en avons jamais configuré. Nous exécutons Discourse dans un conteneur Docker derrière un proxy inverse Apache.

Et si le bucket S3 était invalide, ne devrait-il pas provoquer beaucoup plus de plantages, et pas seulement sur une seule route d’un seul utilisateur ?

S’il vous plaît, ne me prenez pas mal. Je suis peut-être complètement sur la mauvaise voie. Comme je l’ai dit, je ne suis pas très sûr de ce qu’est ce s3_bucket_name ou, si j’ai bien compris, pourquoi il devrait être configuré.

Puis-je le vérifier dans le panneau d’administration ou dois-je examiner le fichier docker-compose ?

Désolé pour le délai … différents fuseaux horaires et horaires de travail … vous voyez.

Mais merci beaucoup d’avoir porté votre attention là-dessus !

Comme j’ai examiné les paramètres, toutes les options S3 sont vides. Est-ce normal, selon vous, puisque nous n’utilisons pas de buckets SE ? Ou est-ce que je me trompe ?

Avez-vous activé le paramètre du site secure media ?

Non, pas vraiment, à ma connaissance de la configuration. Nous avons activé l’option de courriel pour les médias sécurisés.

Comme nous n’avons pas rencontré cette erreur depuis le début, cela pourrait-il être causé par une image intégrée envoyée par courriel ?

Devrais-je essayer de désactiver cette option ?

Mais comme je l’ai dit,

Donc, les médias sécurisés ne devraient pas fonctionner sans aucune configuration d’identifiants S3, n’est-ce pas ?

2 « J'aime »

Est-ce qu’il y a encore quelqu’un ici qui aurait une idée de ce que nous pourrions essayer ?

En fait, le problème est le suivant : l’un de nos administrateurs rencontre cette difficulté, ce qui rend la communication très compliquée, car cet administrateur ne peut ni répondre aux messages ni les consulter.

Pour l’instant, une solution consisterait à rendre à nouveau accessible la boîte de réception des messages. Existe-t-il une astuce ou une possibilité de reconstruire un compte utilisateur unique ou, je ne sais pas, de supprimer tous les messages d’un seul utilisateur ? Cela nous permettrait de repartir de zéro avec ce compte.

De plus, j’ai même pensé à supprimer ce compte, mais, d’après ce que j’ai compris, la suppression des utilisateurs n’est pas possible. Que d’autre pourrions-nous essayer pour créer un nouveau compte pour cet utilisateur et lui permettre à nouveau de participer ?

Merci de me faire part de vos idées, je suis un peu perdu ici.

Merci d’avance.

Désolé, je dois poser la question à nouveau. Dans la mesure où nous avons toujours ce problème :

Vouliez-vous demander si nous activons « secure media » dans le cadre du problème ou de la solution ?

Nous n’avons pas cette option activée. Devrions-nous le faire ?

Ou devrions-nous laisser les choses telles qu’elles sont et espérer d’autres indices pour résoudre le problème ?

1 « J'aime »

Bonjour,
Il semble que je rencontre un problème similaire ici. Pour autant que nous sachions, les messages pour un seul utilisateur ne fonctionnent pas.
Avez-vous d’autres idées sur ce que nous pourrions examiner ?

1 « J'aime »

Selon Jay :

Je tenterais de remplacer la condition where("user_id > 0") par quelque chose comme where("user_id = l-id-de-votre-utilisateur").

Concernant la raison pour laquelle cela se produit ? Ma supposition serait que c’est quelque chose de localisé. Personnellement, j’ai parfois des problèmes avec les guillemets, les accents, etc… :wink:

1 « J'aime »

Mmh, cela ressemble à une tentative.

En pensant à la localisation, je me demandais si le comportement devrait changer en modifiant les paramètres d’interface de l’utilisateur ? Qu’en pensez-vous ?

Je vais essayer la solution de suppression dans les prochains jours.

Merci pour votre aide.

En attendant, nous avons réfléchi un peu. Peut-être que quelqu’un d’autre a des idées à partager.

Une autre chose étrange est la suivante : dans la zone du panneau de messagerie, en cliquant sur l’icône de l’utilisateur puis sur l’enveloppe, tous les messages récents devraient s’afficher, n’est-ce pas ? Dans le cas de nos utilisateurs qui ne parviennent pas à ouvrir leur boîte de réception, il n’y a simplement rien ?

Peut-être que quelqu’un a des idées à ce sujet. Nous pouvons être sûrs que certaines entrées devraient y figurer.

Cela pourrait peut-être orienter les réflexions dans une certaine direction ?

Et une autre piste de réflexion. Nous avons toujours une sorte d’erreur SSL sur notre site. Comme je l’ai dit, nous exécutons Discourse avec Docker derrière un proxy inverse sur Apache. Mais le domaine possède bien son certificat SSL valide émis par Let’s Encrypt.

Néanmoins, nous rencontrons encore des avertissements de contenu mixte sur le site. D’une manière ou d’une autre, les logos standards et les favicons sont servis en HTTP. Nous avons supprimé les personnalisations de marque afin d’éliminer les erreurs de contenu mixte.

Donc, y a-t-il une chance que cela puisse être la cause du problème ?

Lorsque nous avons récemment accédé au point de terminaison JSON https://sub.domain.de/topics/private-messages/firstnamename.json, le résultat JSON était :

{
	"status":500,
	"error":"Internal Server Error"
}

Un examen plus attentif des journaux a révélé ceci :

NoMethodError (undefined method `downcase' for nil:NilClass)
app/models/global_setting.rb:107:in `s3_bucket_name'
app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'
lib/url_helper.rb:90:in `cook_url'
app/models/topic.rb:126:in `image_url'
app/serializers/listable_topic_serializer.rb:34:in `image_url'
(eval):10:in `_fast_attributes'
lib/freedom_patches/ams_include_without_root.rb:57:in `include!'
app/controllers/application_controller.rb:454:in `serialize_data'
app/controllers/application_controller.rb:463:in `render_serialized'
lib/topic_list_responder.rb:16:in `block (2 levels) in respond_with_list'
lib/topic_list_responder.rb:9:in `respond_with_list'
app/controllers/list_controller.rb:177:in `message_route'
app/controllers/list_controller.rb:164:in `block in generate_message_route'
app/controllers/application_controller.rb:354:in `block in with_resolved_locale'
app/controllers/application_controller.rb:354:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:354:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:22:in `call'
lib/middleware/request_tracker.rb:176:in `call'

Comme nous n’utilisons ni les médias sécurisés ni S3, je continue de buter sur ces entrées :

app/models/site_setting.rb:157:in `absolute_base_url'
app/models/upload.rb:184:in `secure_media_url_from_upload_url'
lib/url_helper.rb:60:in `secure_proxy_without_cdn'

Donc, y a-t-il une chance que cela soit causé par une erreur de contenu mixte en coulisses ?

Merci de continuer à nous soutenir.

1 « J'aime »