Массовое удаление всех тем в категории

:bookmark: Данное руководство содержит инструкции по массовому удалению всех тем в категории на самостоятельно размещённом экземпляре Discourse.

:person_raising_hand: Требуемый уровень доступа пользователя: Системный администратор

:warning: Требуется доступ по SSH к вашему серверу

Удаление всех тем из категории может потребоваться по разным причинам, например, для реорганизации контента или очистки устаревших обсуждений. В этом руководстве описаны шаги для безопасного выполнения этой задачи на самостоятельно размещённом сервере Discourse.

:warning: Это необратимое действие. Обязательно создайте резервную копию вашего форума перед продолжением

Шаги для удаления тем в категории

  1. Определите слаг категории: Это имя, используемое в URL категории.
  2. Подключитесь к серверу: Используйте SSH для входа на сервер.
ssh username@your-server.com
  1. Перейдите в директорию Discourse:
cd /var/discourse
  1. Войдите в приложение Discourse:
./launcher enter app
  1. Выполните команду удаления: Замените "mycategory" на слаг вашей категории.
rake destroy:topics["mycategory"]

:information_source: Этот процесс может занять время в зависимости от количества тем.

Удаление тем в подкатегориях

Чтобы удалить темы в подкатегории, включите слаг родительской категории в вашу команду. Например:

rake destroy:topics["childcategory","parentcategory"]

Удаление всех тем во всех категориях

:warning: Это действие удалит все темы из каждой категории!

rake destroy:topics_all_categories

Часто задаваемые вопросы

Как долго Discourse хранит удалённые темы? Я всё ещё могу получить доступ к темам по прямой ссылке.

После удаления темы остаются в базе данных. Просматривать удалённые темы смогут только сотрудники.

Как можно навсегда удалить темы из базы данных?

Вы можете навсегда удалить сообщения (и их темы) из базы данных с помощью задачи destroy:posts. Для этого сначала необходимо включить настройку сайта can_permanently_delete. Подробнее здесь.

Передавайте ID сообщений в виде списка, разделённого запятыми:

rake destroy:posts[4,8,15,16,23,42]

Также можно передать ID сообщений из файла:

cat post_ids.txt | rake destroy:posts

Можно ли ограничить удаление тем определённым периодом времени (между двумя датами)?

Вам нужно будет сделать это через консоль Rails. Примерно следующая команда должна сработать:

 Topic.where("created_at.....").each do |t|
   first_post = t.ordered_posts.first
   PostDestroyer.new(Discourse.system_user, first_post).destroy if first_post
 end

Как найти слаг или ID моей категории?

Задача destroy:topics использует слаг категории (имя в URL категории). Вы можете получить список всех категорий с их ID и слагами, выполнив:

rake categories:list

Дополнительная информация

Для получения дополнительной информации о других административных операциях см.:

22 лайка