Сайт не работает из-за обновления Ember 5

СЛИШКОМ РАНЬО!

Я совершенно пропустил объявление об этом изменении, так как оно совпало с зимними праздниками, а как хобби-разработчик я не читаю этот форум регулярно. Я заметил проблему только сегодня, когда обновление сломало сайт. Теперь у меня нет возможности откатиться назад, так как EMBER_VERSION уже отключён, и нет возможности двигаться вперёд, чтобы исправить то, что нужно исправить, потому что я не вижу предупреждений об устаревании (которые не отображались в прошлый раз, когда мне приходилось проводить активное обслуживание до праздников), да и вообще я мало что знаю об Ember.

Это серьёзно заставляет меня задуматься об извлечении базы данных и переходе на другое форумное решение, где версия по умолчанию действительно безопасна для хобби-разработчиков, которые не могут следить за форумами разработчиков как ястреб.

Может ли кто-нибудь предложить другое решение, учитывая, что я понятия не имею, что ломает Ember 5 и почему? Консоль JavaScript бесполезна.

На самом деле консоль JavaScript обычно очень полезна.

Возможно, вам стоило бы предпочесть stable, но сейчас уже немного поздно, я понимаю.

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

Многие популярные плагины и компоненты тем уже соответствуют требованиям.

Там просто написано «Ember не найден», экран показывает бесконечный индикатор загрузки.

Я установил стандартную версию Discourse по умолчанию от Digital Ocean. На каком-либо этапе меня не спрашивали, какую ветку я хочу, и я предположил, что это поместит меня на LTS-версию. Внедрение ломающей функциональности и её последующее обязательное использование в течение двух месяцев — это НЕ то, что я считаю LTS; в WordPress или Linux так даже не поступают для не-LTS-релизов. Пожалуйста, измените это для всех новых Droplet от DigitalOcean и добавьте предупреждение, что любителям следует держаться подальше.

Вам не понравится этот ответ, но DO делает то, что хочет DO, и это не в чьих-либо руках. Поэтому вам стоит задать этот вопрос им.

И везде за пределами DigitalOcean всегда предупреждают не использовать их установщик.

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

Вам нужно поговорить с DO об этом :slight_smile:

Тем не менее, в стандартной установке (не версии от DO) tests-passed (по умолчанию) не является LTS-версией, это stable. Я полагаю, что CDCK пытаются поощрять такой выбор по умолчанию, потому что это позволяет использовать сообщество для тестирования последней версии. Думаю, это разумная плата за получение бесплатного ПО? Но у вас есть выбор.

Режим безопасной загрузки может помочь. Возможно, вы сможете просто отключить сломанные темы.

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

Режим безопасности в любом случае должен работать. Вы пробовали его запустить? Это позволит изолировать проблемную тему или плагин.

Очень сложно помочь без дополнительной информации.

Какую тему вы используете? Какие плагины? Какой именно из них не работает?

Привет, @Judith

Мне очень жаль, что это стало для тебя неожиданностью. :cry: Я вынес это в отдельную тему, чтобы мы могли сосредоточиться на том, чтобы снова запустить твою систему.

Ты уже добилась какого-то прогресса? :crossed_fingers:

Спасибо всем!

Я определил, что виноваты следующие плагины, отвечающие за отправку пуш-уведомлений Discourse на iPhone (где стандартный способ Discourse не работает): это GitHub - featheredtoast/discourse-pushover-notifications: Pushover notifications for Discourse · GitHub от @featheredtoast, а также мой GitHub - Sprachprofi/discourse-fcm-notifications: Send Discourse push notifications through FCM to any custom app · GitHub. Код Ember в обоих плагинах идентичен и очень прост: всего несколько дополнительных полей в админ-панели и одно дополнительное поле в профиле пользователя, с проверками на то, активны ли пуш-уведомления уже или нет. Поскольку отключение переключателя EMBER_VERSION означает, что я не вижу никаких предупреждений об устаревании или сообщений об ошибках, которые могли бы помочь мне сузить круг поиска и понять, какая из этих нескольких строк вызывает проблему, я обратился за советом к Github Copilot о том, что могло измениться между Ember 3 и Ember 5, и теперь пробую предложенные варианты. Если у вас есть идеи, я готов их выслушать.

Позвольте мне ещё раз подчеркнуть: именно так не следует внедрять изменения, ломающие совместимость, и я глубоко разочарован в Discourse. Несколько политик, идущих вразрез со здравым смыслом:

  • по умолчанию ставить на версию tests-passed, а не на LTS, что делает невозможным использование LTS для нетехнических пользователей;
  • усугубляя это, даже не упоминать в официальном руководстве по установке возможность перехода на более стабильную версию; об этом знают только участники форума, которые, предположительно, меньше нуждаются в этом;
  • делать невозможным откат к предыдущей, рабочей версии;
  • усугубляя это ещё и тем, что гарантировать обратную совместимость проекта менее двух месяцев, намеренно убрав флаг EMBER_VERSION. В других проектах обратная совместимость составляет год, и это проекты, где также возможен откат к старым версиям.

Для вашего собственного плагина, я думаю, что (единственная?) проблема в том, что вы используете глобальную переменную Ember

export default Ember.Component.extend({

которую следует рефакторировать в

import Component from "@ember/component";
export default Component.extend({

(Ещё лучше было бы рефакторировать это в синтаксис классов, но для того, чтобы ваш сайт снова заработал, это не обязательно)

Кстати, ChatGPT способен замечать такие вещи.

Да, я согласен с @RGJ. Исходя из упомянутой выше ошибки «Ember not found», наиболее вероятная проблема — устаревание «ember-global». Подробнее об этом здесь (ссылка из оригинального объявления). В этих плагинах, похоже, это используется для Ember.Component, а также для некоторых вызовов Ember.computed.*.

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

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

Спасибо, @david! Я пока отключил уведомления через Pushover, чтобы сузить область возможных ошибок, и обновил плагин Discourse FCM Notifications до последней версии, но при новой сборке всё равно возникает ошибка «Ember not defined».

Кстати, предложение Copilot было следующим:

Часть про set / setProperties, похоже, неверна — я проверил, что эти функции всё ещё существуют в Ember 5. Замена this._super на super тоже не помогла: при компиляции возникла ошибка. Синтаксис computed также изменился: сейчас он не совпадает ни с оригинальным, ни с тем, что предложил Copilot. Поэтому у меня больше нет идей, что ещё могло измениться в Ember 5. В других своих проектах я Ember не использую.

Есть ли у вас какие-то ещё идеи?

Очень извиняюсь, это моя ошибка — я упустил один момент :facepalm:. Теперь всё должно быть в порядке: Fixup Ember.Component usage by davidtaylorhq · Pull Request #2 · Sprachprofi/discourse-fcm-notifications · GitHub

Да, я думаю, что ИИ может испытывать трудности с различением несущественных новых паттернов (таких как нативный синтаксис классов, this.set/get и т. д.) и критических исправлений устареваний. Предложения ИИ всё ещё могут быть полезны, но только если у вас достаточно контекста, чтобы понимать, чему доверять, а что игнорировать.

Лично я всегда сначала обращаюсь к авторитетному источнику, например https://deprecations.emberjs.com/v3.x.

Сайт снова работает! Большое спасибо за помощь в исправлении проблемы в реальном времени!!! Я очень ценю это.

@featheredtoast, пожалуйста, также примите pull request, чтобы форумы, использующие уведомления Pushover, тоже можно было безопасно обновлять.

Патчи для уведомлений Pushover также объединены на сегодня :white_check_mark: