迁移服务器后Discourse出现故障

我们的 Discourse 实例已在 Digital Ocean 上托管多年,以至于由于仍在使用 Ubuntu 18,开始出现问题。因此,我创建了一个新的 Droplet,并进行了全新的 Discourse 安装,进行了引导,然后从旧的 Droplet 下载并恢复了最新的备份。在此过程中没有出现任何错误。

然而,登录到新实例后,它看起来是这样的:

控制台显示如下:

Uncaught SyntaxError: unexpected token: private identifier
admin-13326e7ca61effcc233d500e3263c63074c9823b7e1d0c1680b6f68e23565d5a.js:76:99
ℹ️ Discourse v3.3.0.beta2-dev — https://github.com/discourse/discourse/commits/2a2eaf835f — Ember v5.5.0 app.js:213
Uncaught (in promise) Error: There is no route named admin
    handlersFor https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    isActiveForRoute https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    isActiveForState https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    get isActive https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    get class https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    Re https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    a https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    tag https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    track https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    d https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    Ke https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    tag https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    track https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    d https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    Je https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    flush https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    <anonymous> https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    evaluate https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    evaluateSyscall https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    evaluateInner https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    evaluateOuter https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    next https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _execute https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    execute https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    sync https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    render https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _renderRoots https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    Nt https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _renderRoots https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _renderRootsTransaction https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _renderRoot https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _appendDefinition https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    appendOutletView https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    invoke https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    flush https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    flush https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _end https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
    _boundAutorunEnd https://discourse.gomomentum.org/assets/vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9
vendor.ff29780b9fed784cce2d843dcb93a803-608f4f77d8437d715d8d39c739c0c8bbe0fe51c9305e55f1ec7d0bee19f5571f.js:9:384138

对于从哪里开始故障排除,任何建议都将不胜感激。谢谢!

1 个赞

您能否尝试在安全模式下访问您的网站,看看它是否能加载?

1 个赞

我已经这样做了。它看起来完全一样,而且我收到了同样的错误。

哦,对了,我刚试着用一个没有管理员或版主权限的账号登录,而且它能正常加载,据我所知。我可以使用三种不同类型的账号,以下是我实验的结果:

  • 管理员账号 → 损坏
  • 版主账号(对管理员仪表盘有有限的访问权限) → 损坏
  • 普通账号 → 运行正常

问题似乎只发生在侧边栏菜单包含“Admin”链接时,因为这正是上面截图中的“Review”项目下方应该出现的内容。也许这有帮助?

另外,如果这很重要的话,我备份的旧实例不在最新的 Discourse 版本上。我记得它大概是 3.1.2 版本。新的实例,当然,是最新版本。

问题是管理员的某个javascript文件存在语法错误,这导致了admin路由未被注册的副作用。

在控制台中,您是否能够展开或访问抛出语法错误的文件?目前信息有限,我们无法判断具体问题所在。

当然,尽管它只是一行连续的最小化 Javascript。我尝试将整个内容粘贴在这里,但它超出了允许的字符数。我使用了一个在线的取消最小化工具,并识别出了抛出错误的那个代码块。

(P.prototype.handlersFor = function (e) {
    var t = this.names[e];
    if (!t) throw new Error("There is no route named " + e);
    for (var r = new Array(t.handlers.length), n = 0; n < t.handlers.length; n++) {
        var i = t.handlers[n];
        r[n] = i;
    }
    return r;
}),

这有帮助吗,还是我需要找到一种方法来发布整个文件?

您是否在使用带有橙色云的 Cloudflare?如果是,请禁用它。

2 个赞

我遇到了一个类似的问题,似乎是今天或昨天开始的。我的管理员路由不起作用,菜单也坏了。

Uncaught (in promise) Error: There is no route named admin

我搜索了一下,看看是否有人遇到Cloudflare的问题,从而找到了这个话题。

如果我清除Cloudflare缓存或启用开发模式,问题就会消失,但只要缓存开始工作,问题就会再次出现。

编辑:我不确定这是否相关,但这是以管理员身份登录时控制台中的一些错误。

这是代码行:

class d extends t.default{static#e=dt7948.g(this.prototype,\"currentUser\",[a.service])#t=void dt7948.i(this,\"currentUser\")

我的菜单在这里被截断了:

当我打开那个菜单时,会发生“no route named admin”错误。它可能在“admin”链接应该在的地方被截断了。

您应该禁用 Cloudflare 中的所有规则,包括 Rocket Launcher 和任何 WAF。

如果您的 Cloudflare 配置保持干净,它不会给 Discourse 带来任何问题。

此网站已关闭 Rocket Loader。我认为最近未对 Cloudflare 设置进行任何更改。(我刚检查了审核日志。)

@Ryan_Hyer 我再次查看了您的截图。它是在管理员菜单项出现的地方被截断的吗?这和我网站上发生的情况一样。

如果您启用了 WAF 等功能,Cloudflare 也可能更改其内部行为,从而影响您的网站。

请确保 Cloudflare 的“自动最小化”功能已禁用,并且您已清除缓存。

他们已弃用该功能,因为它不适用于 Discourse 现在使用的现代 JS 功能。

1 个赞

我们已撤销此更改,因为它存在 Cloudflare 和 Safari 15 的问题。

所以 @Ryan_Hyer 如果你再次升级 Discourse,情况应该会恢复正常。

(但即便如此,我仍然强烈建议禁用 Cloudflare 的所有 JavaScript “优化”功能,例如 Rocket Loader 和自动最小化)

3 个赞

谢谢!Git pull 说我已经是最新的了,所以这个更改可能还没有生效?

我相信我们使用 Cloudflare 的唯一用途是 DNS 和 DDOS 防护,仅此而已。但是,是的,我们之前开启了橙色云。我刚刚关闭了它,我的网站似乎没有损坏,太棒了!谢谢大家!

2 个赞

这个橙色云,如果不做任何默认设置的调整,基本上意味着“会破坏我的网站”。

我们有一个指南,说明如果您正在使用它,需要进行哪些配置。

1 个赞

谢谢,就是这样。我禁用了自动缩小,清除了缓存,进行了硬刷新,问题就解决了。

3 个赞

此主题在上次回复后 30 天自动关闭。不再允许回复。