Подготовка к обновлению Discourse до Ember 5

Скоро Discourse обновит версию JavaScript-фреймворка Ember с версии 3 до версии 5. Основная часть подготовительной работы уже завершена, и многие сайты уже работают на Ember 5 (включая Meta!). :ember:

Это обновление сейчас доступно через флаговую настройку! Для самохостинговых установок Discourse оно включено по умолчанию с 10 января. Изначально поддержка Ember 3 останется доступной через флаг, но будет удалена в течение первого квартала 2024 года.

На нашем управляемом хостинге discourse.org мы будем постепенно внедрять этот флаг в течение следующих нескольких месяцев:

:discourse: Уровень хостинга discourse.org Дата обновления
Basic 2023-12-07 :white_check_mark:
Free 2023-12-12 :white_check_mark:
Pro 2024-01-15 :white_check_mark:
Business 2024-01-22 :white_check_mark:
Enterprise (в индивидуальном порядке)

:eyes: Что это значит для меня и моего сайта?

Если вы запускаете Discourse без дополнительных тем, плагинов или компонентов тем… вы полностью готовы! Не нужно ничего делать или беспокоиться об этом.

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

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

Однако, если у вас есть кастомные темы, компоненты тем или плагины, которые вы создали или заказали для своих сайтов, то этот пост для вас! Мы рассмотрим, как выявить и устранить любые проблемы до обновления.

:face_with_monocle: Выявление проблем

Все проблемы, связанные с обновлением до Ember 5, можно выявить заранее, проверив использование устаревших API. В последних версиях Discourse (начиная с Discourse 3.2.0.beta4-dev) эти критические устаревания будут вызывать предупреждающий баннер для администраторов:

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

При выводе устареваний в консоль Discourse пытается определить соответствующую тему или плагин.

Для разработчиков и провайдеров хостинга мы предоставили несколько инструментов для массового выявления устареваний:

  • При запуске тестов QUnit в конце выводится отчёт со списком всех неустранимых устареваний. В действиях GitHub версия этого отчёта в формате Markdown добавляется на страницу сводки рабочего процесса.

  • Для провайдеров хостинга у нас есть плагин discourse-deprecation-collector, который увеличивает счётчики Prometheus при обнаружении устареваний в продакшене.

:technologist: Устранение устареваний

Обычно сообщение в консоли включает описание проблемы и шаги, необходимые для её устранения. В некоторых случаях они содержат ссылки на внешние ресурсы, такие как веб-сайт Ember deprecations или Discourse Meta.

Если что-то непонятно, пожалуйста, не стесняйтесь написать ниже или в отдельной теме Development, и мы сделаем всё возможное, чтобы помочь.

:rocket: Тестирование на Ember 5

Чтобы протестировать работу на Ember 5 в локальной среде разработки, вы можете запустить наш помощник ember-cli с переменной окружения EMBER_VERSION. Например:

EMBER_VERSION=5 bin/ember-cli -u

Чтобы убедиться, что всё работает как ожидалось, проверьте версию Ember, которую Discourse выводит в консоль браузера.

В продакшене вы можете добиться того же, добавив EMBER_VERSION: 5 в секцию env: вашего файла app.yml.

42 лайка

Поздравляю команду, это должно было быть ОГРОМНОЕ количество работы! :sweat_smile:

11 лайков

Дэвид, полагаю, это полностью обратимо: достаточно вернуть этот атрибут в исходное состояние и выполнить пересборку?

5 лайков

Да, абсолютно обратимо :+1:

3 лайка

Отличная работа, ребята. Где я могу найти список официально поддерживаемых тем/компонентов? Мне удалось выяснить, что 3 или 4 моих компонента-плагина являются официальными. (Тег «official» указан в теме)

Но для четвёртого я нашёл только этот URL: GitHub - discourse/discourse-full-width-component: Make Discourse occupy the full browser width · GitHub

Как я могу узнать, является ли он официальным и не сломает ли обновление?

Редактирование: похоже, что здесь можно использовать фильтр: Topics tagged official

Затем найти конкретную тему в списке. Раньше я пытался искать в правом верхнем углу форумов.

Когда я ищу в списке тем, она не отображается, но я вижу, что сотрудники указаны как контрибьюторы на GitHub:

4 лайка

В качестве очень приблизительного ориентира: если URL начинается с github.com/discourse/, мы возьмём это на себя. В случае с discourse-full-width-component я не вижу никаких причин для беспокойства — он должен работать корректно в Ember 5.

6 лайков

Есть ли способ узнать, работает ли сайт на хостинге Discourse, где вы являетесь администратором, на Ember 5?

Я заглянул на страницу администратора, но не увидел никаких указаний на это. Сайт, где я являюсь администратором, находится по адресу:

5 лайков

На данный момент Ember 5 работает на Meta и на нашем базовом тарифе хостинга.

В последних версиях Discourse мы выводим информацию о текущей версии в консоль. Поэтому вы можете открыть консоль инструментов разработчика и проверить первую строку:

10 лайков

У вас есть доступ к инструментам разработчика на каждом сайте в интернете! В Windows и Linux в Chrome можно нажать клавишу F12. Для macOS это находится в… каком-то меню.

8 лайков

Спасибо.

Я думал, что речь идет о консоли Discourse, к которой можно получить доступ, если установить сайт через командную строку операционной системы.


Шаги

  1. Откройте браузер (в этом примере Chrome).
  2. Перейдите на сайт Discourse (в этом примере https://swi-prolog.discourse.group/).
  3. Нажмите F12.
  4. Если вкладка Console вверху не активна, выберите вкладку Console.
  5. Первая строка должна указывать версию Ember.

4 лайка

А если кто-то пытается что-то сделать на iPad, консоль (только в Safari) можно найти через приложение:

https://apps.apple.com/app/id1064318327

О, его больше нет. Обидно.

5 лайков

Отличное дополнение. Молодцы, Дэвид и команда ModernJS. :rocket:

хе-хе. Вы можете запустить Chrome на macOS, и инструменты разработчика будут такими же. Сложности возникают именно на iOS и сенсорных экранах (например, в iPad в режиме рабочего стола есть веб-инспектор, но он не идеален).

5 лайков

Нажав F12? Я думал, что знаю, что это не работает.

5 лайков

optioncommandJ

5 лайков

Не понимаю, почему это сложнее запомнить, чем F12. И то и другое в принципе трудно найти. И, возможно, поиск в меню, как я предлагал, не поможет.

7 лайков

Команда option J должна быть вам легко запомнить :laughing:

5 лайков

Мой любимый способ — всегда [правый клик] [проверить элемент]. Думаю, это работает одинаково во всех браузерах и ОС.

6 лайков

Верно!

О, это просто и всегда работает. Отлично. К тому же это экономит мне около дюжины кликов, ведь именно это так часто нужно сделать. Конечно, похоже, что я захватил этот #announcements. Извините.

7 лайков

Я понимаю, что это потребует от меня времени на разработку :grimacing: (новая боковая панель, удаление значков категорий… это довольно часто бывает — использование собственной темы обходится дорого!).

Есть ли способ обновить форум до Ember 5, не сломав всё в продакшене? Я нахожусь на хостинге в рамках Business Plan.

  • Спасибо за предупреждение и сообщения о устаревании функций. Но при исправлении устареваний мне придётся кодировать тему и для Ember 3, и для Ember 5?
  • Есть ли у нас выбор — обновляться или нет? Или решение принимаете только вы?

Кажется, было бы неплохо иметь что-то вроде среды «препродакшн» или «тестирования».

6 лайков

Привет, Damien :wave:.

Discourse и Ember объявляют что-либо устаревшим только тогда, когда есть альтернатива для немедленного использования. Поэтому, если вам нужно внести какие-либо изменения, их можно сделать сразу, и они будут работать в среде Ember 3.

Мы следуем этому подходу в ядре Discourse и во всех наших официальных темах и плагинах. Мы не создаём отдельный код для Ember 3 / Ember 5.

Боюсь, что это не опционально. Поддержание актуальности зависимостей ядра Discourse для нас критически важна с точки зрения безопасности, производительности и функциональности. Функции, которые предоставляет Ember 5, станут необходимыми для будущих улучшений самого Discourse.

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

Одно из таких улучшений появилось несколько часов назад и должно помочь вам в этой ситуации.

Если вы перейдёте на /safe-mode на своём форуме, там теперь есть флажок «Превращать предупреждения о устаревании JavaScript в ошибки».

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

Технически это не совсем то же самое, что «тестирование Ember 5 на форуме». Но это хороший способ симулировать предстоящие разрушительные изменения без необходимости полностью отдельной тестовой среды.

8 лайков