Тема постоянно удаляется

На моём сайте есть тема, которую кто-то (назовём его X) опубликовал, а затем удалил из-за ошибочной информации. Я восстановил её и попросил X добавить исправление под своим оригинальным постом.

С тех пор тему постоянно удаляют. Я уже дважды её восстановил, и всё выглядело нормально, но через некоторое время она снова появляется как удалённая.

Что происходит?

5 лайков

Возможно, пользователь, о котором идёт речь, постоянно удаляет это? У меня были пользователи, которые предпочитали удалять посты, чем терпеть «смущение» от необходимости исправлять себя.

1 лайк

Проверьте журнал (admin/logs/staff_action_logs), чтобы увидеть, удаляет ли их пользователь. В журнале будут отображены сообщения, которые были как отредактированы, так и удалены… а также кем они были удалены. Вы также можете нажать на значок информации для получения дополнительной информации.

Некоторые пользователи передумали сохранять сообщения по этой и многим другим причинам. Иногда это просто ситуация, когда человек считает, что лучше забыть то, что он собирался сказать. Иногда приходится принять их причину, даже если она не была озвучена. :wink:

4 лайка

Пользователи не могут мгновенно удалять темы или сообщения. Всё, что они могут сделать, — это инициировать удаление через 24 часа. Это будет публичным намерением, указанным в теме или сообщении, например:

(сообщение отозвано автором, будет удалено через 24 часа, если не будет отмечено)

Кроме того, это можно сделать для тем только в том случае, если у них нет ответов и теме не более 1 дня.

5 лайков

У нас тоже это происходит, когда тему удаляет система, то есть через 24 часа после удаления поста автором вернуть его невозможно; даже если мы восстановим её, она автоматически удаляется снова через 30 минут.

5 лайков

Я поговорил с пользователем и, насколько я понимаю, он не удаляет это постоянно. На самом деле он был удивлён этим, так как именно он первым сообщил мне об этой проблеме.

Вот как выглядят мои логи:

(Спасибо @JimPas за предложение!)

Есть какие-нибудь идеи? Могу ли я предоставить дополнительные данные для помощи в устранении проблемы? Похоже, что @Pad_Pors мог столкнуться с чем-то подобным.

3 лайка

Кто-нибудь нашёл решение этой проблемы позже? У нас наблюдается то же самое.

Пользователь создал пост, затем удалил его, попросил восстановить, и теперь система продолжает удалять его (всю тему, так как это первый пост).

Мы могли бы перенести содержимое в новую тему, но тогда все, кто переходит по оригинальной ссылке, попадут на страницу «Страница не найдена».

5 лайков

Можно ли воспроизвести это в понедельник, @tshenry?

5 лайков

Привет, @AstonJ

Не могли бы вы подтвердить шаги для воспроизведения? Вот что я проверяю, но хочу убедиться, что это звучит правильно для вас?

  1. Пользователь создает тему
  2. Пользователь удаляет тему
  3. Тема переходит в статус запланированного удаления:
  4. Тема автоматически удаляется через 24 часа
  5. Пользователь обращается к сотрудникам с просьбой восстановить тему
  6. Сотрудник находит удаленную тему и восстанавливает её
  7. Система удаляет тему после восстановления

Если я что-то делаю не так, пожалуйста, дайте знать.

2 лайка

Привет, Тейлор. Тема была создана в апреле, но, похоже, произошло следующее:

  1. Пользователь создал тему, нажав «Отправить» (шаблон темы был опубликован — пользователь сказал, что не мог его редактировать).
  2. Пользователь опубликовал контент во втором сообщении, а затем удалил первое сообщение.
  3. Первое сообщение перешло в статус «запланировано на удаление».
  4. Пользователь обратился к сотрудникам с вопросом, опасаясь, что вся тема может исчезнуть.
  5. Сотрудник восстановил первое сообщение, скопировал содержимое второго сообщения в него, а затем удалил второе сообщение.
  6. Тема оставалась активной с сообщениями от 8 апреля по 17 апреля.
  7. Система удалила тему некоторое время спустя (точное время неизвестно). Редактирование: один из модераторов сообщил, что система удалила тему 7 июля.

Мы обнаружили эту проблему только вчера, когда пользователь спросил, куда исчезла его тема.

Если вам понадобится что-то ещё, просто дайте знать (кстати, эта тема постоянно удаляется).

4 лайка

Хм. Не совсем уверен, что полностью понимаю, что происходит на шаге 1, но если исходить из того, что суть в том, что пользователь создал тему, то шаг 2, похоже, невозможен. Если я создаю тему как обычный пользователь, отвечаю на неё, а затем пытаюсь удалить свой первый пост (пост темы), то этот пост не будет помечен на удаление — это сделано намеренно.

3 лайка

В моём случае всё происходило так:

  1. Пользователь создаёт тему
  2. Удаляет её
  3. Я восстанавливаю её
  4. Спустя некоторое время она снова становится удалённой

Точные временные рамки мне неизвестны.

4 лайка

Могу подтвердить, что со мной это случалось уже не раз.

2 лайка

Похоже, что у сотрудников нет кнопки «восстановить» на теме обычного пользователя, когда она запланирована к удалению. Только автор оригинального сообщения может восстановить пост в течение периода ожидания. Когда вы говорите, что восстановили это, вы имеете в виду после автоматического удаления?

1 лайк

Ага, извини, Тейлор! Полагаю, они удалили первый пост, а затем создали второй — насколько я помню, это возможно.

1 лайк

Вот что у меня получилось:

  1. Пользователь создает тему
  2. Пользователь удаляет пост в теме, планируя удаление (я изменил настройку сайта delete_removed_posts_after на 1)
  3. Тема удаляется по истечении указанного времени
  4. Сотрудник восстанавливает тему и возвращает исходную версию поста (только восстановление вернет пост обратно с сообщением «Тема отозвана автором, будет автоматически удалена через 1 час, если не будет помечена»)
  5. Тема будет удалена снова через некоторое время

Что происходит: Когда пользователь удаляет свой собственный пост в теме, устанавливается свойство user_deleted со значением true. Фоновая задача DestroyOldDeletionStubs запускается каждые 30 минут. Эта задача выполняет функцию PostDestroyer.destroy_stubs, которая ищет в базе данных и удаляет любые посты, у которых user_deleted установлен в true и истек «таймер удаления».

Проблема: Когда сотрудник восстанавливает пост, user_deleted никогда не устанавливается в false, поэтому при следующем запуске DestroyOldDeletionStubs пост будет удален снова.

Решение: Я почти уверен, что нам нужно добавить некоторую логику в функцию staff_recovered, которая установит user_deleted в false (функция user_recovered уже делает это). См. discourse/lib/post_destroyer.rb at main · discourse/discourse · GitHub

Быстрое исправление: Восстановите пост в теме, получите его ID, затем перейдите в консоль Rails и выполните:

Post.find_by_id(POST_ID).update(user_deleted: false)

ID поста можно легко найти, добавив .json в конец URL темы. Например, используя эту тему: https://meta.discourse.org/t/topic-keeps-getting-deleted/128013.json. ID поста темы — 632362.

10 лайков

Ага, нужно исправить @eviltrout

Отличная работа детектива, @tshenry!

6 лайков

Отличная работа, Тейлор :slight_smile:

Если кому-то ещё нужно выполнить описанное выше, сначала необходимо восстановить удалённый пост или тему, иначе метод find вернёт nil.

4 лайка

Я всё ещё сталкиваюсь с этой проблемой. Получило ли какое-либо распространение решение по установке user_deleted в false?

Существует ли быстрое исправление или обходной путь для размещённых экземпляров?

2 лайка

Я бы предложил следующее:

  • назначить пользователя сотрудником
  • войти под его аккаунтом
  • восстановить указанный пост
  • «снять» статус сотрудника с пользователя
2 лайка