Erro na Caixa de Entrada de Mensagens do Usuário 500

Ei,

Estamos enfrentando um comportamento super estranho, mas atualmente apenas de um único usuário, ao abrir a caixa de entrada de mensagens.

Rodamos o Discourse em Docker no Apache com ProxyPass, versão Discourse 2.6.0.beta3.

Esse usuário não consegue expandir o painel de mensagens; aparece a nota “No Content” ou o que quer que seja a versão original em inglês de “Keine Inhalte” — nós usamos o de.DE :wink:

E quando clica novamente no ícone de mensagens, ou seja, quando o usuário tenta abrir a caixa de entrada de mensagens, recebemos um erro 500.

A página diz: "error on loading: [/topics/private-messages/firstname.name.json].

Isso acontece apenas com um usuário específico. Os outros não têm esse problema.

Se o usuário tentar https://domain.de/u/firstname.name/messages/sent ou https://domain.de/u/firstname.name/messages/group/any, tudo funciona normalmente.

Mas https://domain.de/u/firstname.name/messages/ ou https://domain.de/u/firstname.name/messages/inbox resulta em erro 500.

Tentamos alterar as funções desse usuário, fizemos atualizações e reconstruímos o aplicativo via launcher. Infelizmente, ao abrir a caixa de entrada, o erro 500 ainda ocorre.

Alguém já teve esse comportamento? O que podemos fazer? Existe uma maneira de reconstruir as mensagens? Ou precisamos excluí-las?

Por favor, deem algum conselho, estamos totalmente perdidos.

Obrigado desde já!

Vi algo semelhante outro dia, com um nome de grupo em /topics/private-messages-group. Resultou que havia uma pesquisa sensível a maiúsculas e minúsculas, e o nome do grupo na URL estava todo em letras minúsculas.

Você pode verificar se isso se comporta de forma diferente se alterar o caso na URL para corresponder ao caso do nome de usuário? (algo como https://domain.de/u/Firstname.Name/messages)

5 curtidas

Olá Richard,

obrigado pela resposta rápida!

Tentei alterar as maiúsculas e minúsculas, como você sugeriu:

  • …Firstname.Name…

Também tentei outras combinações:

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

Mas o erro continua o mesmo.

Tentei acessar https://domain.de/u/Firstname.Name/messages/sent e outras rotas, que funcionaram perfeitamente, como antes.

Então, tem alguma sugestão sobre isso?

Agradeceria muito pela ajuda.

Isso já era um tanto improvável, então receio que não possa te dar nenhuma dica sobre isso.

2 curtidas

Sem problema, nunca se sabe, certo? Fico feliz com qualquer ajuda.

Talvez alguém mais possa dar uma contribuição?
Obrigado!

Olá,

Espero muito que alguém possa nos ajudar com nosso problema. Como @RGJ sugeriu, descobrimos que a questão parece ser um pouco mais profunda, mas ainda não conseguimos resolver o problema das caixas de entrada inacessíveis de um único usuário. Infelizmente, fazemos uso intensivo de mensagens. Somos organizados em pequenos grupos que frequentemente precisam se comunicar de forma não pública. Portanto, as mensagens são a solução ideal.

Se precisarem de mais informações ou de logs, por favor, me avisem o que é necessário e eu os colarei aqui.

Agradeço a todos pelas dicas adicionais e por ainda estarem lendo :wink:

Você verificou os logs de erro no navegador da web enquanto estava logado como administrador?

@codinghorror Muito obrigado pela ajuda adicional.

Na verdade, há uma saída de erro bastante longa relacionada a essa solicitação. Mas não consigo resolver isso.

Vou tentar colocar as informações de log aqui

Mensagem (21 cópias relatadas)

NoMethodError (método `downcase' não definido para 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'

Rastreamento

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

Bem, isso é muito e não faço ideia de onde procurar. Espero que isso possa trazer alguma luz ao nosso problema. Se precisar de mais alguma informação, por favor, me avise.

Muito obrigado por dar uma olhada nisso!
OBRIGADO

1 curtida

Seu s3_bucket_name está inválido?

Obrigado pela resposta,

Resposta curta: eu não sei, acho que não.

O nome do bucket S3 parece estar relacionado aos sistemas de armazenamento S3 da Amazon, certo? E, se for o caso, provavelmente não pode ser inválido. Nunca configuramos um. Estamos rodando o Discourse em containers atrás de um proxy reverso Apache.

E, se o bucket S3 estivesse inválido, não deveria causar mais falhas, não apenas em uma rota de um único usuário?

Por favor, não me entenda mal. Posso estar no caminho totalmente errado. Como disse, não tenho certeza do que é esse s3_bucket_name ou, se entendi corretamente, por que ele deveria ser configurado.

Posso verificar isso no painel de administração ou preciso conferir o docker-compose?

Desculpe pelo atraso na resposta… fusos horários e horários de trabalho diferentes… você sabe como é.

Mas muito obrigado por ficar de olho nisso!

Como verifiquei a configuração, todas as opções do S3 estão vazias. Isso está correto, já que não utilizamos buckets SE? Ou estou entendendo errado?

Você ativou a configuração do site secure media?

Não, não realmente, pelo que entendi da configuração. Ainda ativamos a opção de e-mail para mídia segura.

Como não experimentamos esse erro desde o início, será que isso pode ser causado por uma imagem incorporada enviada por e-mail?

Devo tentar desativar essa opção?

Mas, como disse:

Então, a mídia segura não deveria funcionar sem nenhuma credencial do S3 configurada, certo?

2 curtidas

Ainda tem alguém aqui com alguma ideia do que poderíamos tentar?

Bem, o problema é que temos esse problema com um de nossos administradores, o que torna muito difícil a comunicação, já que há um administrador que não consegue responder às mensagens nem visualizá-las.

Por enquanto, uma solução seria tornar a caixa de entrada de mensagens acessível novamente. Então, existe alguma solução alternativa ou possibilidade de recriar uma única conta de usuário ou, não sei, excluir todas as mensagens de um único usuário? Assim, poderíamos começar do zero com essa conta?

Além disso, cheguei a pensar em excluir essa conta, mas, pelo que entendi, não é possível excluir usuários. O que mais poderíamos tentar para criar uma nova conta para esse usuário, permitindo que ele participe novamente?

Por favor, me diga quais ideias você tem, estou perdido aqui.

Obrigado antecipadamente.

Desculpe, preciso perguntar novamente. Enquanto ainda tivermos esse problema:

Você quis perguntar se ativamos a “mídia segura” como parte do problema ou da solução?

Não temos essa opção ativada. Devemos ativá-la?

Ou devemos deixá-la como está e esperar por outras dicas para corrigir o problema?

1 curtida

Olá,
Parece que estou enfrentando um problema semelhante aqui. As mensagens para um único usuário, até onde sabemos, não estão funcionando.
Alguma outra ideia do que podemos verificar??

1 curtida

De acordo com Jay:

Eu tentaria substituir a condição where("user_id > 0") por algo como where("user_id = o-id-do-seu-usuario")

Sobre o porquê disso estar acontecendo? Minha aposta seria algo localizado. Eu mesmo, às vezes, tenho problemas com aspas, acentos, etc… :wink:

1 curtida

Mhm, isso parece uma boa tentativa.

Pensando em localização, fiquei me perguntando se o comportamento deveria mudar ao alterar as configurações de interface do usuário. O que você acha disso?

Vou tentar a solução de exclusão nos próximos dias.

Obrigado pela ajuda.

Enquanto isso, refletimos um pouco. Talvez alguém mais tenha alguma contribuição para compartilhar.

Outra coisa estranha é: na área do painel de mensagens, ao clicar no ícone do usuário e depois no envelope. Deveriam ser exibidas todas as mensagens recentes, certo? No caso dos nossos usuários que não conseguem abrir a caixa de entrada, não aparece nada?

Talvez alguém tenha alguma ideia sobre isso. Quando pudermos afirmar com certeza que deveriam ser listadas algumas entradas.

Talvez isso aponte algumas ideias em alguma direção?

E também outra linha de raciocínio. Ainda temos algum tipo de erro SSL no nosso site. Como disse, estou rodando o Discourse com Docker atrás de um proxy reverso no Apache. Mas o domínio já possui um certificado SSL válido emitido pelo Let’s Encrypt.

Ainda assim, temos alguns avisos de conteúdo misto no site. De alguma forma, os logotipos padrão e os favicons estão sendo servidos via HTTP. Deletamos as marcações personalizadas na tentativa de eliminar os erros de conteúdo misto.

Então, há alguma chance de isso estar causando o problema?

Quando acessamos recentemente a rota JSON https://sub.domain.de/topics/private-messages/firstnamename.json, o resultado foi:

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

Uma análise mais detalhada dos logs revelou o seguinte:

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'

Como não estamos usando mídia segura nem o S3, ainda me deparo com essas entradas:

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'

Então, há alguma chance de isso ser causado por um erro de conteúdo misto nos bastidores?

Obrigado por ainda estarem aí.

1 curtida