Um canal de chat não mostra nem salva mensagens

Fiz um upgrade há algumas horas e agora todos os canais que têm grupos personalizados mostram um canal vazio. Posso escrever e enviar mensagens, mas se eu sair ou atualizar a página, o canal não tem histórico.

Os logs mostram isto:

Message

NoMethodError (undefined method `replies_count' for nil:NilClass)
(eval):17:in `_fast_attributes'
app/controllers/application_controller.rb:545:in `render_json_dump'
app/controllers/application_controller.rb:532:in `render_serialized'
app/controllers/application_controller.rb:414:in `block in with_resolved_locale'
app/controllers/application_controller.rb:414:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:74:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:369:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:24:in `call'
lib/middleware/request_tracker.rb:228:in `call'

Backtrace

plugins/chat/app/serializers/chat/message_serializer.rb:161:in `thread_reply_count'
(eval):17: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/array_serializer.rb:89:in `block in _serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `map'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:79:in `_serializable_array'
active_model_serializers (0.8.4) lib/active_model/array_serializer.rb:73:in `serializable_array'

Env

HTTP HOSTS: foorumi.katiska.eu

Ideias?

Editar:

Se isso significa alguma coisa, aqueles canais que se comportavam mal eram anteriormente subcategorias, mas eu mudei essas para categorias principais.

Mas meus usuários estão alegando que as coisas estavam quebradas antes dessa mudança.

Olá,

você já tentou usar configurações de thread experimentais (e ocultas) em algum momento?

Eu mudei algo há muito tempo, mas… não me lembro o quê, mas tenho quase certeza de que foi algo que depois deixou de ser experimental.

Você tem algo em mente?

Ainda está experimental e oculto hoje, e quero dizer que você tem o direito de brincar com isso :slight_smile: Estou apenas tentando reduzir a lista de possíveis problemas.

O erro mostra claramente que estamos tentando acessar código que não deveria ser acessado se uma thread nunca foi criada, então é surpreendente.

Se e quando eu tiver alterado apenas as coisas que encontrei aqui, e a pesquisa não mostrou nada relevante.

O Rails pode mostrar o que não está mais nos padrões?

Fazer merge disso nos próximos 30 minutos, isso corrigirá seu problema. Investigaremos isso mais na semana que vem, mas não quero que você fique bloqueado nisso o fim de semana todo.

4 curtidas

Ótimo!

Ainda gostaria de entender o que diabos eu quebrei… Tenho certeza de que, na época, alterei apenas novas configurações de melhorias de busca e similares.

Mas, se for totalmente honesto… tenho a tendência de tentar algo se isso puder tornar os tópicos melhores de alguma forma, e se nada acontecer, eu esqueço imediatamente.

(E eu reclamo o tempo todo sobre a documentação preguiçosa :man_facepalming: )

Por enquanto, não tenho uma resposta melhor, mas investigaremos isso na próxima semana, acabei de mesclar. Vou ficar offline, me avise se não resolver, verei amanhã.

2 curtidas

Primeiro: sua correção não ajudou. Desculpe. Ou ajudou — esse erro foi um pouco estranho,
Por favor, tente me seguir :wink:
Eu tenho 5 canais:

  • três para TL1
  • um para staff
  • um para um grupo personalizado de 5 pessoas

Movi todos, exceto o canal de staff, de subcategorias para o topo.

Então, testei como o componente de prévia de categoria funciona, mas não era o que eu precisava, então o desativei. Logo depois, fiz uma reconstrução para obter o plugin de bloqueio de categoria.

Funcionou, exceto que tive alguns problemas estranhos com o tema FKB Pro e os modais de login/cadastro — estes mostravam apenas um ícone de carregamento giratório. Isso aconteceu apenas com meu iPad, tanto quanto sei.

Nesse ponto, percebi que o canal de chat do grupo personalizado não funcionava mais. Além disso, o grupo de staff e 2 dos 3 grupos TL1 mostravam apenas mensagens muito recentes. Um grupo TL1 estava intacto.

Tentei o modo de segurança e desativei a maioria dos plugins através das configurações. Não ajudou e abri este tópico.

Resumindo e após várias reconstruções, removendo e reativando plugins:

  • o canal de staff e dois canais TL1 são de baixo tráfego e eu esqueci totalmente que uso a regra de 14 dias lá; então não houve problemas
  • o canal do grupo personalizado estava quebrado se eu tivesse os plugins Data Explorer e Category Lockdown instalados, e ativar/desativar não importava
  • reconstruir sem esses dois plugins corrigiu esse canal quebrado. Quando reconstruí novamente (isso é uma palavra?) com ambos os plugins, esse canal ainda estava ok

Minha suposição leiga é que algo deu errado quando tentei pela primeira vez as Pré-visualizações de Categoria, depois as desativei, depois reconstruí com o Bloqueio de Categoria e o último movimento foi excluir as Pré-visualizações de Categoria. Corrigir alguns erros bizarros de SQL ou bites falsos exigiu a remoção total do Data Explorer e do Lockdown, seguida por uma reinstalação mais recente.

O que não consigo entender é o log de erros do Discourse — como ele se encaixa em tudo isso.

De qualquer forma. Tenho todos os plugins online novamente e os canais funcionam bem.

Olá @Jagster , eu também faço parte da equipe de chat e estou investigando isso um pouco mais a fundo. Lendo o que você fez, nada disso deveria ter causado esse erro. Cada mensagem de chat está potencialmente vinculada a um tópico de chat no banco de dados via thread_id, e uma de suas mensagens tem um thread_id para um tópico que não existe por… algum motivo. Não temos nenhum código para excluir tópicos, então talvez tenha havido alguma atualização que deu errado.

Você pode tentar executar esta consulta para mim e postar os resultados? Isso nos permitirá ver se você tem um problema generalizado ou se foi apenas um caso isolado estranho:

SELECT id, chat_channel_id, thread_id
FROM chat_messages
WHERE thread_id IS NOT NULL AND thread_id NOT IN (
  SELECT id FROM chat_threads
);

Usei o Explorador de Dados e obtive isto (confio que você consegue ler JSON :wink: )

{"success":true,"errors":[],"duration":0.5,"result_count":2,"params":{},"columns":["id","chat_channel_id","thread_id"],"default_limit":1000,"rows":[[10721,14,152],[10744,14,152]]}

O canal problemático foi o de ID 14.

1 curtida

Obrigado por isso, acho que seguimos uma abordagem de "esperar para ver" para este bug, pois:

  1. Não está claro como foi causado e
  2. Não foi reproduzido em alguns sites que verifiquei
  3. Aconteceu apenas em um lugar no seu site

Mais uma verificação seria apenas executar esta consulta também:

SELECT * FROM chat_threads WHERE id = 152;

E certifique-se de que não retorna nada.

Confirmado; zero, nada

Claro. É realmente difícil consertar quando não se encontra nada.

Obrigado pessoal!

1 curtida