Плагин вызывает ошибки при пересборке

Вот что происходит:

  1. У некоторых людей в файле app.yml указана очень старая версия плагина «Вопросы и ответы» с моим личным именем пользователя GitHub в URL репозитория.

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

  3. Спустя ещё несколько лет Pavilion передал плагин «Вопросы и ответы» в Discourse. Изначально Discourse сохранил название discourse-question-answer.

  4. Несколько месяцев назад я создал свой собственный форк плагина, размещённый в discourse, пока он всё ещё назывался discourse-question-answer.

  5. Люди со старыми ссылками на плагин QnA, содержащими мой личный аккаунт GitHub, теперь клонировали мой новый форк значительно обновлённого плагина discourse-question-answer, размещённого в discourse. Иными словами, очень старая ссылка теперь указывала на форк нового плагина. Несмотря на прошедшие годы, я должен был предвидеть это, поэтому приношу извинения. Я удалил этот форк.

  6. Discourse изменил название discourse-question-answer на discourse-upvotes. Это изменение названия не оказало существенного влияния на ваш случай, @Jaap-Jan_Swijnenburg, но именно поэтому вы теперь (неожиданно) клонируете форк этого репозитория.

  7. Миграция в discourse/discourse-upvotes (ранее discourse-question-answer) предполагает, что столбец value в post_custom_fields является типобезопасным JSON.

  8. Старые данные, созданные плагином, когда он назывался angusmcleod/discourse-question-answer (несколько лет назад), не сохранялись как валидный JSON благодаря concern HasCustomFields в discourse/discourse. Я предполагаю, что эти данные были добавлены до того, как 4 года назад было добавлено проверка типов JSON (в крайних случаях всё ещё возможно появление невалидного JSON в пользовательских полях, зарегистрированных как JSON).

Следовательно:

  1. Когда люди со (устаревшей на несколько лет) ссылкой angusmcleod/discourse-question-answer в своём файле app.yml обновляют Discourse, миграция из новой версии плагина клонируется, запускается и потенциально вызывает эту ошибку.

Есть несколько решений этой проблемы:

  1. @Jaap-Jan_Swijnenburg, в вашем случае вам просто нужно удалить ссылку на мой старый плагин QnA, и вы сможете пересобрать свой сайт. Всё, больше ничего. Похоже, вы уже это сделали :+1:

  2. Миграцию плагина discourse/discourse-upvotes можно обновить, чтобы она обрабатывала значения, не являющиеся JSON, в столбце value таблицы post_custom_fields.

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