为Discourse升级到Ember 5做准备

Discourse 即将把 Ember Javascript 框架版本从 3 升级到 5。绝大多数准备工作已经完成,许多站点(包括 Meta!)已经在运行 Ember 5。:ember:

此升级目前可通过功能标志(feature flag)启用!对于自托管的 Discourse 安装,这是从 1 月 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.modal-controllers(请参阅此主题了解更多信息

  • 所有 Ember 弃用(即 ID 不包含 -discourse. 的弃用)

在控制台中打印弃用信息时,Discourse 会尝试识别相关的主题/插件。

对于开发者和托管提供商,我们提供了一些工具来批量识别弃用:

  • 在运行 QUnit 测试时,最后会打印一份报告,列出所有未解决的弃用。在 GitHub Actions 中,此报告的 Markdown 版本会添加到工作流摘要页面。

  • 对于托管提供商,我们有 discourse-deprecation-collector 插件,每当生产环境中遇到弃用时,该插件会增加 prometheus 计数器。

:technologist: 解决弃用

通常,控制台消息会包含问题描述以及解决问题所需的步骤。在某些情况下,它们会链接到外部资源,例如 Ember 弃用 网站或 Discourse Meta。

如果任何内容不清楚,请随时在此处或在专门的 Dev 主题下发帖,我们将尽力提供帮助。

:rocket: 在 Ember 5 上进行测试

要在本地开发环境中测试 Ember 5,您可以使用 EMBER_VERSION 环境变量启动我们的 ember-cli 助手。例如:

EMBER_VERSION=5 bin/ember-cli -u

要确认一切正常,请检查 Discourse 在浏览器控制台中打印的 Ember 版本。

在生产环境中,您可以通过将 app.yml 文件 env: 部分的 EMBER_VERSION: 5 来实现相同的功能。

42 个赞

恭喜团队,这一定付出了很多努力!:sweat_smile:

11 个赞

David,我猜想通过恢复此属性并重新构建,这完全是可逆的吧?

5 个赞

是的,完全可逆 :+1:

3 个赞

干得好,伙计们。我如何找到官方支持的主题/组件列表。我发现我的插件组件中有 3 或 4 个是官方的。(“official”标签列在主题中)

但对于第四个,我只找到了这个 URL:GitHub - discourse/discourse-full-width-component: Make Discourse occupy the full browser width

我如何知道它是否是官方的/不会在升级时中断?

编辑:看起来我可以在这里过滤: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 键。在 Mac 上,它在 . . . 某个菜单中。

8 个赞

谢谢。

我以为你说的是安装站点后在操作系统命令提示符下可以访问的 Discourse 控制台。


步骤

  1. 打开 Internet 浏览器(本例中使用 Chrome)
  2. 导航到 Discourse 站点(本例中使用 https://swi-prolog.discourse.group/)
  3. F12
  4. 如果顶部的“控制台”选项卡未激活,则选择“控制台”选项卡。
  5. 第一行应显示 Ember 版本。

4 个赞

如果在 iPad 上有人尝试执行操作,则可以通过应用找到控制台(仅限 Safari):

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

哦,它不再可用了。真可惜。

5 个赞

喜欢这个新增功能。David 和 ModernJS 团队做得太棒了。 :rocket:

呵呵。您可以在 MacOS 上运行 Chrome,开发者工具是一样的。iOS 和触摸屏使得它很难/几乎不可能使用(例如:iPad 的桌面模式有一个 Web Inspector 工具,但它并不理想)。

5 个赞

按 F12 键?我以为我知道那不管用。

5 个赞

optioncommandJ

5 个赞

我不知道这有什么比 F12 更难记住的。两者都很难被发现。而且也许我建议的在菜单上查找的方法也没有帮助。

6 个赞

option command 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,现在有一个复选框“Make Javascript deprecations raise an error”(使 Javascript 弃用引发错误)。

这将允许您安全地查看您的网站在所有待处理的弃用转换为错误后的运行情况。

严格来说,这与“在论坛上测试 Ember 5”并不完全相同。但它是在不需要完全独立的暂存环境的情况下模拟即将发生的破坏性更改的好方法。

8 个赞