Плагин документации — индексная тема не работает после восстановления

Несколько месяцев назад я установил Discourse, добавил несколько тем как «Индексные темы» в разделе «Режим документации». Всё работало как ожидалось.
Я сделал резервную копию всего, удалил аккаунт Digital Ocean и так далее.

Несколько дней назад я снова установил Discourse и восстановил всё из созданного ранее файла резервной копии. Всё работает, кроме разделов документации. Сначала я подумал, что проблема может быть в том, что я снял эти индексные темы с публикации, но они были сняты с публикации ещё до удаления всего, и тогда они работали, так что это не могло быть причиной. Тем не менее, я попробовал снова опубликовать их, но безрезультатно. Боковая панель по-прежнему отображала категории и прочее, что является настройкой по умолчанию.

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

Кажется, что в процессе восстановления что-то по какой-то причине нарушает работу режима документации.

Просто проверяю — вы это видели?

[quote=“nat, post:130, topic:322376”]

Обновления для тех, кто размещает у себя

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

bundle exec rake doc_categories:build_sidebar

# если выполнение вышеуказанной задачи завершается ошибкой NoDatabaseError,
# для типичных установок на собственном сервере выполните команду ниже
sudo -E -u discourse bundle exec rake doc_categories:build_sidebar

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

Спасибо за ссылку.
Поскольку я всё ещё создаю всю структуру, я просто создал новую тему, скопировал и вставил содержимое из старой, а затем удалил старую тему. У меня в любом случае было всего две такие темы.

Так вот, мой вопрос: нужно ли выполнять эту rake task каждый раз при обновлении Discourse? Или только при восстановлении (если я сделаю это снова в будущем)?

Нет, эта задача rake — это разовое действие на дату упомянутого сообщения.

Вам не следует создавать тему заново. Достаточно зайти в настройки категории, отменить привязку, сохранить и снова привязать существующую тему — это должно сработать.

Просто интересно — почему это не было реализовано как миграция?

По моим воспоминаниям того времени — это не могло быть миграцией. Миграции в идеале не должны затрагивать код приложения (поскольку код может измениться с момента планирования миграции и вызвать ошибку).

PR также указывает причину:

Этот PR также включает rake-задачу (doc_categories.rake) для перестроения разделов боковой панели и ссылок из активных тем индекса документации — это не рекомендуется делать в рамках миграции, так как это потребует использования либо парсера, либо Nokogiri (реализации которых могут измениться и привести к некорректной миграции).

Правильно ли я понимаю, что отныне мне не нужно ничего из этого делать? Ни задачу rake, ни процесс перепривязки, когда я обновляю Discourse?

Просто хочу убедиться, что всё правильно понял.

Да. Это было только один раз.

Отлично! Спасибо за разъяснение! :raising_hands:

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

Не упускаю ли я что-то?

Привет, коллега Nat, я подтверждаю эту проблему.

Думаю, проблема реальная, но нужно надёжно воспроизвести её. Надеюсь, на следующей неделе вернусь с хорошими новостями.

@nathank, быстрый вопрос: у вас включено расширение discourse-calendar?

@nathank, полагаю, проблема возникает, когда включён плагин календаря (объяснено в PR). В основном из-за побочного эффекта (ошибки) в Calendar плагин Docs Categories не переиндексировал тему. С исправлением он надёжно переиндексирует.

Дайте знать, если это исправление не сработает для вас.

Извините за медленный ответ — да!

Спасибо за очень быстрое превентивное исправление; я обновлю свой сайт и скоро протестирую его.