ember 5 升级导致网站出问题

太早了!

我完全错过了这个变化的公告,因为它与冬季假期混在一起了,而且作为一个业余爱好者,我并不经常阅读这个论坛。直到今天的更新破坏了网站,我才注意到。现在我无法回滚,因为 EMBER_VERSION 已经被禁用,而且我也没有办法前进修复任何需要修复的东西,因为我看不到弃用警告(上次我需要进行积极维护,在假期之前,这些警告并没有出现),更不用说我对 Ember 有多少了解了。

这真的让我考虑提取数据库并迁移到另一个论坛解决方案,一个默认版本对无法像鹰一样关注开发论坛的业余爱好者来说是安全的。

考虑到我不知道是什么破坏了 Ember 5 或为什么,有人能想到其他解决方案吗?Javascript 控制台没有帮助。

2 个赞

实际上,JavaScript 控制台通常非常有帮助。

也许您更喜欢“稳定版”,但现在有点晚了,我对此表示赞赏。

我建议删除您所有的自定义设置,也许可以使用一个暂存实例,逐一重新应用它们,找出导致问题的设置,然后删除它们或进行修改。

许多流行的插件和主题组件已经兼容。

2 个赞

它只显示“Ember not found”,屏幕上是一个无尽的加载图标。

我安装了 Discourse 的默认标准 Digital Ocean 版本。我从未被问及想要哪个分支,我以为那会让我使用 LTS 版本。在 2 个月内推出一个破坏性功能,然后又强制要求使用,这绝不是我所认为的 LTS;在 WordPress 或 Linux 中,即使是非 LTS 版本也不会这样做。请更改所有新的 DigitalOcean 镜像,并添加警告,让爱好者远离。

你可能会讨厌这个答案,但 DigitalOcean 做它想做的,这超出了其他人的控制。所以你应该去问他们。

而且,DigitalOcean 以外的所有地方都一直被警告不要使用他们的安装。

3 个赞

从控制台的错误信息中,你通常可以判断出错误是从哪个主题组件发出的。你能把完整的错误信息(展开错误信息)粘贴在这里吗?或者,如果可能的话,你介意在这里分享你的论坛网址吗(如果你愿意,也可以通过私信分享)?

3 个赞

你需要和 DO 谈谈 :slight_smile:

话虽如此,在标准安装(非 DO 的版本)中,tests-passed(默认)不是 LTS,而 stable 是。我相信 CDCK 试图鼓励这种默认设置,因为它利用社区来测试最新版本。我认为这是获得免费软件的合理回报?但你有选择。

2 个赞

安全模式可能有所帮助。也许你可以禁用损坏的主题。

我看到几年前我曾为你做过一些事情。我本想看看是否能找到一个快速的解决方案,但我现在已经没有你网站的账户了。

3 个赞

安全模式应该可以工作,无论如何,您尝试过吗?这样您就可以隔离问题主题或插件了。

没有其他信息很难提供帮助。

您正在使用什么主题?什么插件?哪个插件坏了?

3 个赞

@Judith

非常抱歉这让您感到意外。:cry: 我已将此内容移至一个专门的主题,以便我们能集中精力让您恢复正常运行。

您有进展吗?:crossed_fingers:

3 个赞

感谢大家!

我已经确定导致问题的插件是负责将 Discourse 推送通知发送到 iPhone 的插件(因为标准的 Discourse 方法不起作用),即 @featheredtoastGitHub - featheredtoast/discourse-pushover-notifications: Pushover notifications for Discourse 以及我自己的 https://github.com/Sprachprofi/discourse-fcm-notifications。它们两者的 Ember 代码完全相同,而且非常简单,只是在管理员界面中多了几个字段,在用户个人资料中多了一个字段,并检查推送通知是否已激活。鉴于 EMBER_VERSION 开关的弃用意味着我无法看到任何可能帮助我缩小问题范围的弃用警告或错误消息,我向 Github Copilot 咨询了 Ember 3 和 Ember 5 之间可能发生的变化,并正在尝试这些建议。如果您有任何想法,我洗耳恭听。

我只想重申,破坏性更改不应该这样推出,我对 Discourse 深感失望。几项违背所有常识的政策:

  • 默认情况下,将非技术人员放在 tests-passed 版本而不是 LTS 版本上
  • 官方安装指南中甚至没有提及切换到更稳定版本的可能性,这加剧了这个问题;只有内部人士知道这一点,而他们可能对此需求不大
  • 无法恢复到早期可用的版本
  • 通过故意移除 EMBER_VERSION 标志,将项目的向后兼容性缩短到不到两个月,这加剧了这个问题。其他项目的向后兼容性长达一年,而且这些项目也能够恢复到旧版本。
2 个赞

对于您自己的插件,我认为(唯一?)问题是您正在使用 Ember 全局变量

export default Ember.Component.extend({

应该重构为

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

(重构为类语法会更好,但这对于让您的网站恢复运行并非必需)

顺便说一句,ChatGPT 能够发现类似这样的问题。

4 个赞

Yup,我同意 @RGJ 的观点。根据上面提到的“Ember not found”错误,最可能的问题是“ember-global”已弃用。更多详情请参见此处(链接自原始公告)。在这些插件中,它似乎被用于 Ember.Component,以及一些 Ember.computed.* 调用。

这里有两个快速的 PR。在修复此问题后,可能会出现其他问题,但在快速浏览 JavaScript 代码后,我没有发现任何明显的问题。

感谢您对推广过程的反馈!我们一直在努力在进步和稳定性之间取得平衡。我们一定会吸取这次推广的经验,并将其应用于未来的升级/重构项目。

10 个赞

感谢 @david!我现在已停用 Pushover 通知以缩小错误范围,并拉入了最新版本的 Discourse FCM Notifications 插件,但新的构建仍然出现“Ember 未定义”错误。

供参考,Copilot 的建议是:

关于 set / setProperties 的部分似乎是错误的——我检查过这些函数在 Ember 5 中仍然存在。将 this._super 改为 super 也没有奏效,编译时出现了错误消息。computed 的语法也已更改,目前既不是原始的也不是 Copilot 推荐的。所以我对 Ember 5 中可能发生的其他变化已经没有想法了。我的其他项目中没有使用 Ember。

还有其他想法吗?

3 个赞

抱歉,这是我的失误 - 我漏掉了一个地方 :facepalm:。这个应该可以了:Fixup Ember.Component usage by davidtaylorhq · Pull Request #2 · Sprachprofi/discourse-fcm-notifications · GitHub

是的,我认为人工智能可能难以区分非必需的新模式(例如原生类语法、this.set/get 等)和必需的弃用修复。AI 建议仍然有用,但前提是你拥有足够的上下文来知道该信任或忽略什么。

就个人而言,我总是会先去权威来源,例如 https://deprecations.emberjs.com/v3.x

7 个赞

网站现在恢复了!非常感谢您实时帮助我解决这个问题!!!我非常感激。

@featheredtoast 请也接受此拉取请求,以便使用 Pushover 通知(Pushover notifications)的论坛也可以安全更新。

5 个赞

Pushover 通知补丁也已于今日合并 :white_check_mark:

9 个赞

此主题已在 3 天后自动关闭。不再允许回复。