pfaffman
(Jay Pfaffman)
1
phpbb3のサイトをインポートしました。管理ユーザーは数千件の投稿を持っていますが、それはユーザーサマリーページと https://estude.profcaju.com/u/USER/activity にリストされていますが、そのユーザーが /posted にアクセスすると、インポート以降のトピックしか表示されません。
インポートされたトピックで、そのユーザーが作成したものを確認し、そのトピック/ユーザーのTopicuserをプルアップすると、posted が false に設定されています。見つけられるすべての ensure_consistency (TopicUser、Topic、User) を実行しました。
TopicUserで posted を true に設定すると、/posted に表示されるようになります。
TopicUser.where(user_id: 1).update_all(posted: true) のようなことをすべきでしょうか?すべてのユーザーに対して行うべきでしょうか?
「いいね!」 4
cocococosti
(Constanza Abarca)
5
Jayさん、ご報告ありがとうございます!
ensure_consistency rake タスクの問題のようです。現在作業中のマイグレーションで確認したところ(まだ ensure_consistency タスクは実行していません)、TopicUser レコードは既に posted: false(デフォルト値)で作成されていました。rake タスクが この時点 に達すると、「重複キー」エラーが生成され、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 です。
修正のためのプルリクエストを開きました。すぐに実行できるはずです。
「いいね!」 5