/posted empty with a phpbb3 import

我为某个网站执行了 phpbb3 导入。管理员用户有数千个帖子,这在用户摘要页面和 https://estude.profcaju.com/u/USER/activity 中都有列出,但当该用户访问 /posted 时,他们只能看到自导入以来的主题。

当我查看一个由该用户创建的已导入主题,并拉出该主题/用户的 Topicuser 时,posted 被设置为 false。我已经运行了所有我能找到的 ensure_consistencyTopicUserTopicUser)。

如果我在 TopicUser 中将 posted 设置为 true,它就会显示在 /posted 中。

我应该执行类似 TopicUser.where(user_id: 1).update_all(posted: true) 的操作吗?我应该为所有用户都这样做吗?

4 个赞

感谢您报告此问题,Jay!

这似乎是 ensure_consistency rake 任务的一个问题。我刚刚检查了我现在正在处理的一个迁移(尚未运行 ensure_consistency 任务),TopicUser 记录已经以 posted: false(默认值)创建。当 rake 任务到达 这一点 时,它会生成一个“duplicate key”错误,并且由于 ON CONFLICT DO NOTHING 记录未被创建。

def insert_topic_users
  log "Inserting topic users..."

  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

TopicUser 记录在 create_topic 步骤中创建,更具体地说是在这里 discourse/lib/topic_creator.rb at main · discourse/discourse · GitHub

我打开了一个包含修复程序的 PR,您可以立即运行:

5 个赞