Массовое закрытие тем

Я нашел этот пост с инструкциями о том, как использовать консоль Rails для массового закрытия тем: Auto-close old topics from a migrated forum - #10 by zogstrip

Однако у меня есть несколько вопросов по этому поводу:

  1. Есть ли более новый способ сделать это?
  2. Если я хочу закрывать темы на основе даты последнего действия (а не даты создания), есть ли переменная, которую можно использовать вместо created_at?
  3. Можно ли как-то исключить личные сообщения из закрытия? Я запустил запрос в тестовой среде и заметил, что он затронул все темы, независимо от того, были ли они публичными или приватными; мы хотели бы по возможности исключить личные сообщения.
  4. На нашем форуме почти 16 лет контента, импортированного из нашего предыдущего решения. Что касается времени выполнения запроса: (a) как мы можем определить, сколько времени потребуется для его выполнения, и (b) лучше ли разбить его на части (например, выполнить для всего до 2010 года, затем для 2011, 2012 и так далее, пока не дойдем до 2023 года) или просто запустить его как один запрос?

Просто хочу убедиться (особенно в пункте 4), что мы не окажем слишком сильного влияния на производительность системы. Я знаю, что многое зависит от оборудования, на котором мы работаем (а я даже не знаю, какое именно, так как у нас есть команда инфраструктуры, которая занимается установкой и обслуживанием всего оборудования).

Буду благодарен за любые рекомендации!

По поводу пункта #2: с помощью плагина Data Explorer (о котором я ранее не знал) кажется, что updated_at — это, вероятно, значение, соответствующее «временной метке последнего ответа». Правильно ли я понимаю?

Спасибо за эту подсказку — она, думаю, очень полезна для моих первых трёх вопросов. Буду признателен за разъяснения по поводу updated_at и планирую работать с нашей расширенной историей сообщений и тем.

Однозначно стоит сначала протестировать небольшую партию. Я, э-э, уже однажды из-за массовых действий «положил» сайт сообщества и пожалел, что не протестировал подмножество данных заранее.

Спасибо — я так и думал, что это может быть так. Хорошо получить подтверждение по выбранному подходу.

Думаю, я попробую восстановить одну из последних резервных копий и настроить изолированную песочницу отдельно от тестовой среды. Не уверен, как в такой конфигурации будет работать компонент SSO, но было бы полезно оценить производительность, прежде чем применять изменения к рабочей системе.

Это хорошая идея:

Отмечу, что если у вас особенно активное сообщество, тестовый сайт не будет полностью имитировать рабочую среду, так как помимо массовых действий есть влияние от органического использования сайта пользователями.

Определённо — спасибо за указание на пост о тестовом сервере, это тоже будет весьма полезно.

Да, нагрузка пользователей, скорее всего, не станет большой проблемой — похоже, что среднее количество просмотров страниц в день составляет около 50 тысяч по всем категориям (краулеры, анонимные и зарегистрированные пользователи). Понимание потенциального увеличения нагрузки по сравнению с текущей будет полезно для планирования.

В итоге я настроил тестовый сервер (на самом деле это было довольно просто — просто восстановил резервную копию из продакшена и вошёл через процедуру восстановления администратора, так как система настроена только на OIDC). Похоже, у нас около 160 тысяч тем, и быстрый тест только по одной категории с примерно 7500 темами занял 6 минут на моей тестовой системе — значит, на все темы уйдёт около 2 часов. Влияние на производительность системы (мониторилось через htop) здесь оказалось практически незаметным.

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

Огромное спасибо за все советы и помощь — за последние пару дней я многому научился в этой платформе благодаря этому. :slight_smile: