/postado vazio com uma importação phpbb3

Fiz uma importação do phpbb3 para um site. O usuário administrador tem milhares de postagens, e isso está listado na página de resumo do usuário e em https://estude.profcaju.com/u/USER/activity, mas quando esse usuário visita /posted, ele só vê os tópicos desde a importação.

Quando olho para um tópico importado que foi criado pelo usuário e exibo o Topicuser para esse tópico/usuário, posted está definido como false. Executei todas as ensure_consistency que encontrei (TopicUser, Topic, User).

Se eu definir posted como true em um TopicUser, ele aparecerá em /posted.

Devo fazer algo como TopicUser.where(user_id: 1).update_all(posted: true)? Devo fazer isso para todos os usuários?

4 curtidas

Obrigado por relatar isso, Jay!

Parece um problema com a tarefa rake ensure_consistency. Acabei de verificar uma migração em que estou trabalhando agora (ainda não executei a tarefa ensure_consistency) e os registros TopicUser já foram criados com posted: false (o padrão). Quando a tarefa rake chega a este ponto, ela gera um erro de “chave duplicada” e os registros não são criados por causa do ON CONFLICT DO NOTHING

def insert_topic_users
  log "Inserindo usuários de tópicos..."

  DB.exec <<-'SQL'
    INSERT INTO topic_users (user_id, topic_id, posted, last_read_post_number, first_visited_at, last_visited_at, total_msecs_viewed)
         SELECT user_id, topic_id, 't' , MAX(post_number), MIN(created_at), MAX(created_at), COUNT(id) * #{MS_SPEND_CREATING_POST}
           FROM posts
          WHERE user_id > 0
       GROUP BY user_id, topic_id
    ON CONFLICT DO NOTHING
  SQL
end

Os registros TopicUser são criados na etapa create_topic, mais especificamente aqui discourse/lib/topic_creator.rb at main · discourse/discourse · GitHub.

Abri um PR com uma correção que você pode executar agora:

5 curtidas