Cloudflare 或插件导致我的 Discourse 实例故障?

在我的 Discourse 论坛上,点击通知铃铛图标时,一直显示加载动画。加载菜单中提示“慢一点,该 IP 地址的请求过多”。我正在使用 Cloudflare。

2 个赞

您具体是如何使用 Cloudflare 的?

这是一个非常相关的话题:

您是否按照那里的三个步骤进行了操作?

1 个赞

是的,我操作了,并且在最近的 beta 更新之前一直运行正常。
目前大部分功能也正常,只是通知出现了问题:它会每隔几秒发起无限次请求。

这是我的控制台截图:

这是打开的文件截图:

2 个赞

请禁用 Cloudflare,它正在破坏您的网站。

2 个赞

我使用的是 Cloudflare 的免费套餐,并启用了 5 美元的 Cloudflare SSL 订阅。目前没有任何 Cloudflare 功能被启用:Rocket Loader 已关闭,所有其他优化(如代码压缩等)也均已关闭,而像 Railgun 等其他功能在免费套餐中甚至不可用。缓存设置也已配置为尊重现有的源站头部信息。之前一切正常,但我刚刚意识到,我通过访问 /admin/upgrade 升级到了 master Git 分支,这可能导致了问题。之后我虽然移除了相关脚本和引用,但系统仍在反复检查通知。目前只有通知功能引发了问题,其他一切运行正常。

我使用 Cloudflare 来分发存储在 Amazon S3 并通过 CloudFront 托管的文件。如果我不使用 Cloudflare,我的成本将会上升。Cloudflare 仅作为 DNS 和 SSL 提供商使用,其优化功能和大部分特性均已关闭,且许多功能在免费套餐中根本不可用。您认为在我的情况下,Cloudflare 仍然是问题的根源吗?

我是否应该尝试重新构建以解决这些问题?

附注:我是 StackOverflow、CodingHorror 博客和 Discourse 的忠实粉丝。致敬 :vulcan_salute:

1 个赞

首先尝试禁用 CloudFlare(基本 DNS 除外)作为实验。如果问题消失,这就说明了一些情况。

1 个赞

我已禁用 Cloudflare 的橙色云朵模式,并等待浏览器显示 Let’s Encrypt 的 SSL 证书(而非 Cloudflare),以确认内容直接从服务器获取而非经过 Cloudflare。随后我重新构建了项目,但现在点击用户菜单和通知图标时,仍然出现以下错误:

Uncaught (in promise) DOMException: Quota exceeded.
_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77250 Uncaught TypeError: Cannot read property 'dasherize' of undefined
    at s.itemHtml (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77250)
    at _application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77390
    at _ember_jquery-d1d89874d5f08a664c68007c6c2eef5e3bb1cbd8058291fce7818d8ef4ded8ca.js:39008
    at t.u.Mixin.create.c.forEach (_ember_jquery-d1d89874d5f08a664c68007c6c2eef5e3bb1cbd8058291fce7818d8ef4ded8ca.js:38995)
    at t.u.Mixin.create.c.map (_ember_jquery-d1d89874d5f08a664c68007c6c2eef5e3bb1cbd8058291fce7818d8ef4ded8ca.js:39007)
    at s.html (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:77389)
    at s.value (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:80621)
    at s.value (_application-977ce16935600e0a620c1ea565154ab68e46f60a9fe0f207139e0f2128dd9474.js:80371)
    at s (_vendor-7fd29296ee54f8a7ced9508b106a09ec4aae4912ed1cf10eceb7eb2acca03309.js:20669)
    at t.exports (_vendor-7fd29296ee54f8a7ced9508b106a09ec4aae4912ed1cf10eceb7eb2acca03309.js:20652)

打开该文件后,显示内容如下:

define("discourse/widgets/quick-access-notifications", ["discourse/lib/ajax", "discourse/widgets/widget", "discourse/widgets/quick-access-panel"], function (_ajax, _widget, _quickAccessPanel) {
  "use strict";

  (0, _widget.createWidgetFrom)(_quickAccessPanel.default, "quick-access-notifications", {
    buildKey: function buildKey() {
      return "quick-access-notifications";
    },
    emptyStatePlaceholderItemKey: "notifications.empty",

    markReadRequest: function markReadRequest() {
      return (0, _ajax.ajax)("/notifications/mark-read", { type: "PUT" });
    },
    newItemsLoaded: function newItemsLoaded() {
      if (!this.currentUser.enforcedSecondFactor) {
        this.currentUser.set("unread_notifications", 0);
      }
    },
    itemHtml: function itemHtml(notification) {
      var notificationName = this.site.notificationLookup[notification.notification_type];

      return this.attach(notificationName.dasherize() + "-notification-item", notification, {}, { fallbackWidgetName: "default-notification-item" });
    },
    findNewItems: function findNewItems() {
      return this._findStaleItemsInStore().refresh();
    },
    showAllHref: function showAllHref() {
      return this.attrs.path + "/notifications";
    },
    hasUnread: function hasUnread() {
      return this.getItems().filterBy("read", false).length > 0;
    },
    _findStaleItemsInStore: function _findStaleItemsInStore() {
      return this.store.findStale("notification", {
        recent: true,
        silent: this.currentUser.enforcedSecondFactor,
        limit: this.estimateItemLimit()
      }, { cacheKey: "recent-notifications" });
    }
  });
});

刚注意到,这个问题仅在我以管理员用户登录且同时显示 mini_profiler 时出现。我使用普通用户登录后,功能正常。

1 个赞

参见:

或许可以清除所有本地存储。

我已经清除了存储空间,现在不再显示配额错误。但是,它仍在发起多次请求,导致我收到 429 响应,提示需要降低速度。我现在已不再使用 Cloudflare(是否也应该在 app.yml 中注释掉 Cloudflare 模板?)。错误在 dasherize 处依然相同。这些错误仅出现在管理员用户身上,并且我会很快被限流。

您正在运行哪些非官方插件和主题?有可能是其中一个产生了大量请求负载。

我正在使用以下插件

作为入门建议,我会注释掉所有未使用的插件。即使已安装但被禁用,它们仍会给系统带来负担。

首先禁用所有第三方插件(即没有绿色对勾的插件)。这很可能就是问题所在。

我已经移除了 Cloudflare,并卸载了许多插件和第三方插件,但问题仍未解决。

移除所有没有绿色对勾的项目并重新构建。

请在另一台计算机上确认是否出现相同的故障,可能是磁盘空间不足或存在其他本地问题。

2 个赞

在我的移动浏览器上它能正常工作:slight_smile: 我会查一下,看看本地出了什么问题。可能是磁盘空间不足或磁盘驱动器速度慢导致的。不管怎样,能卸载掉几个不必要的插件真是太好了:laughing:

1 个赞

看来我仍然面临一些用户遇到的这个问题。

我认为我的问题与下面提到的问题有关,而且我在升级到该版本后遇到了此问题:

我无法确定是什么导致了这个问题。它对新用户有效,但对其他用户却无效。我之前使用了一个 Discourse 关注插件,后来将其注释掉了,现在出现了这个问题。这是否可能是因为移除了该插件导致的?我猜测这可能只影响那些之前有关注者或使用过该插件的用户。这确实是一个大胆的假设。这个插件真的可能是罪魁祸首吗?

是的,这是有可能的。由于我们并不拥有该插件,因此无法确定是否属实。您可以尝试重新启用该插件并进行检查。如果问题得到解决,请在该插件的主题帖中报告此问题。

2 个赞

@Falco 是的,这确实解决了这个问题。我已重新添加了 discourse-follow 插件,问题已解决。谢谢 :slight_smile:

3 个赞