Несколько месяцев назад я установил Discourse, добавил несколько тем как «Индексные темы» в разделе «Режим документации». Всё работало как ожидалось.
Я сделал резервную копию всего, удалил аккаунт Digital Ocean и так далее.
Несколько дней назад я снова установил Discourse и восстановил всё из созданного ранее файла резервной копии. Всё работает, кроме разделов документации. Сначала я подумал, что проблема может быть в том, что я снял эти индексные темы с публикации, но они были сняты с публикации ещё до удаления всего, и тогда они работали, так что это не могло быть причиной. Тем не менее, я попробовал снова опубликовать их, но безрезультатно. Боковая панель по-прежнему отображала категории и прочее, что является настройкой по умолчанию.
Тогда я решил скопировать содержимое оригинальной темы, создать с ним новую тему, установить её как индексную, и эта тема работает. Я также закрыл её и снял с публикации, как и неработающую, так что закрытие и снятие с публикации не являются проблемой.
Кажется, что в процессе восстановления что-то по какой-то причине нарушает работу режима документации.
Для тех, кто использует этот плагин на собственном сервере, наше последнее обновление требует ручной перестройки индекса. Для этого нужно выполнить следующую задачу 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 также включает rake-задачу (doc_categories.rake) для перестроения разделов боковой панели и ссылок из активных тем индекса документации — это не рекомендуется делать в рамках миграции, так как это потребует использования либо парсера, либо Nokogiri (реализации которых могут измениться и привести к некорректной миграции).
@nathank, полагаю, проблема возникает, когда включён плагин календаря (объяснено в PR). В основном из-за побочного эффекта (ошибки) в Calendar плагин Docs Categories не переиндексировал тему. С исправлением он надёжно переиндексирует.
Дайте знать, если это исправление не сработает для вас.