Данное руководство содержит инструкции по массовому удалению всех тем в категории на самостоятельно размещённом экземпляре Discourse.
Требуемый уровень доступа пользователя: Системный администратор
Требуется доступ по SSH к вашему серверу
Удаление всех тем из категории может потребоваться по разным причинам, например, для реорганизации контента или очистки устаревших обсуждений. В этом руководстве описаны шаги для безопасного выполнения этой задачи на самостоятельно размещённом сервере Discourse.
Это необратимое действие. Обязательно создайте резервную копию вашего форума перед продолжением
Шаги для удаления тем в категории
- Определите слаг категории: Это имя, используемое в URL категории.
- Подключитесь к серверу: Используйте SSH для входа на сервер.
ssh username@your-server.com
- Перейдите в директорию Discourse:
cd /var/discourse
- Войдите в приложение Discourse:
./launcher enter app
- Выполните команду удаления: Замените
"mycategory"на слаг вашей категории.
rake destroy:topics["mycategory"]
Этот процесс может занять время в зависимости от количества тем.
Удаление тем в подкатегориях
Чтобы удалить темы в подкатегории, включите слаг родительской категории в вашу команду. Например:
rake destroy:topics["childcategory","parentcategory"]
Удаление всех тем во всех категориях
Это действие удалит все темы из каждой категории!
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
Дополнительная информация
Для получения дополнительной информации о других административных операциях см.: