Вот что происходит:
-
У некоторых людей в файле app.yml указана очень старая версия плагина «Вопросы и ответы» с моим личным именем пользователя GitHub в URL репозитория.
-
Я передал плагин QnA в
paviliondevнесколько лет назад. GitHub перенаправляет URL репозиториев при их передаче, поэтому старые URL с моим личным именем пользователя продолжали работать. -
Спустя ещё несколько лет Pavilion передал плагин «Вопросы и ответы» в Discourse. Изначально Discourse сохранил название
discourse-question-answer. -
Несколько месяцев назад я создал свой собственный форк плагина, размещённый в
discourse, пока он всё ещё называлсяdiscourse-question-answer. -
Люди со старыми ссылками на плагин QnA, содержащими мой личный аккаунт GitHub, теперь клонировали мой новый форк значительно обновлённого плагина
discourse-question-answer, размещённого вdiscourse. Иными словами, очень старая ссылка теперь указывала на форк нового плагина. Несмотря на прошедшие годы, я должен был предвидеть это, поэтому приношу извинения. Я удалил этот форк. -
Discourse изменил название
discourse-question-answerнаdiscourse-upvotes. Это изменение названия не оказало существенного влияния на ваш случай, @Jaap-Jan_Swijnenburg, но именно поэтому вы теперь (неожиданно) клонируете форк этого репозитория. -
Миграция в
discourse/discourse-upvotes(ранееdiscourse-question-answer) предполагает, что столбецvalueвpost_custom_fieldsявляется типобезопасным JSON. -
Старые данные, созданные плагином, когда он назывался
angusmcleod/discourse-question-answer(несколько лет назад), не сохранялись как валидный JSON благодаря concernHasCustomFieldsвdiscourse/discourse. Я предполагаю, что эти данные были добавлены до того, как 4 года назад было добавлено проверка типов JSON (в крайних случаях всё ещё возможно появление невалидного JSON в пользовательских полях, зарегистрированных как JSON).
Следовательно:
- Когда люди со (устаревшей на несколько лет) ссылкой
angusmcleod/discourse-question-answerв своём файле app.yml обновляют Discourse, миграция из новой версии плагина клонируется, запускается и потенциально вызывает эту ошибку.
Есть несколько решений этой проблемы:
-
@Jaap-Jan_Swijnenburg, в вашем случае вам просто нужно удалить ссылку на мой старый плагин QnA, и вы сможете пересобрать свой сайт. Всё, больше ничего. Похоже, вы уже это сделали

-
Миграцию плагина
discourse/discourse-upvotesможно обновить, чтобы она обрабатывала значения, не являющиеся JSON, в столбцеvalueтаблицыpost_custom_fields.
Отмечу, что вариант 2 также покроет дополнительный случай, когда люди действительно хотят перейти со старой версии плагина QnA на discourse-upvotes. В этом случае миграция запустится, но завершится ошибкой, если какие-либо записи в столбце value таблицы post_custom_fields не являются валидным JSON.