디스커스 포럼에서 알림을 위한 벨 아이콘을 클릭하면 로더가 계속 표시됩니다. 로더 메뉴에는 "이 IP 주소에서 요청이 너무 많습니다. 속도를 늦춰 주세요"라는 메시지가 표시됩니다. 저는 Cloudflare를 사용 중입니다.
구체적으로 Cloudflare를 어떻게 활용하고 계신가요?
아래는 매우 관련성이 높은 주제입니다:
거기에 제시된 세 가지 단계를 따르셨나요?
네, 따랐고 최근 베타 업데이트 전까지는 잘 작동했습니다.
대부분의 경우에도 여전히 잘 작동합니다. 다만 알림이 문제를 일으키고 있는데, 몇 초마다 무한한 수의 요청을 보내고 있습니다.
그리고 제 콘솔은 다음과 같습니다.
여기서는 열려 있는 파일입니다.
Cloudflare를 비활성화하세요. 사이트가 깨지고 있습니다.
저는 Cloudflare의 무료 플랜을 사용 중이며, 5달러 구독으로 Cloudflare SSL을 활용하고 있습니다. 현재 Cloudflare의 어떤 기능도 활성화되어 있지 않은 상태입니다. 예를 들어 Rocket Loader는 꺼져 있고, 미니피케이션 등 기타 최적화 기능도 모두 비활성화되어 있으며, Railgun과 같은 일부 기능은 무료 플랜에서조차 사용할 수 없습니다. 또한 캐싱 설정은 기존 오리진 헤더를 존중하도록 되어 있습니다. 원래는 잘 작동하고 있었는데, /admin/upgrade로 이동하여 마스터 git 브랜치로 업그레이드한 것이 문제를 일으킨 것 같다는 것을 최근에야 깨달았습니다. 이후 관련 스크립트와 언급 사항을 제거했지만, 여전히 반복적으로 알림을 확인하고 있습니다. 문제는 알림 부분에서만 발생하며, 그 외 모든 기능은 정상적으로 작동합니다.
저는 Cloudflare를 사용하여 Amazon S3에 저장된 파일을 CloudFront를 통해 서빙하고 있습니다. Cloudflare를 사용하지 않으면 비용이 증가할 것입니다. Cloudflare는 현재 DNS 및 SSL 제공자 역할만 하고 있으며, 그 최적화 및 기능(대부분)은 비활성화되어 있고, 많은 기능은 무료 플랜에서조차 사용할 수 없습니다. 제 시나리오에서 Cloudflare가 여전히 문제의 원인이 될 수 있다고 생각하시나요?
문제를 해결하기 위해 재빌드를 시도해 볼까요?
P.S.: 저는 StackOverflow, CodingHorror 블로그, 그리고 Discourse를 좋아하는 팬입니다. 감사합니다 ![]()
일단 실험 삼아 CloudFlare(기본 DNS 제외)를 비활성화해 보세요. 문제가 사라진다면 그 사실로부터 몇 가지 정보를 얻을 수 있습니다.
Cloudflare의 오렌지 클라우드를 비활성화하고, 브라우저에서 Cloudflare가 아닌 Let’s Encrypt SSL이 표시되도록 기다린 후 콘텐츠가 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가 함께 표시되고 있습니다. 일반 사용자로 로그인해 보니 정상적으로 작동했습니다.
참고:
아마도 모든 로컬 스토리지(LS)를 삭제하면 될 것 같습니다
저장소를 비웠고, 이제 할당량(quota) 오류가 표시되지 않습니다. 하지만 여전히 여러 요청을 보내고 있으며, 속도를 줄이라는 429 응답을 받고 있습니다. 현재 Cloudflare를 사용하지 않고 있습니다. (app.yml에서 Cloudflare 템플릿도 주석 처리해야 할까요?). 그리고 dasherize에서 동일한 오류가 발생합니다. 관리자 계정에서만 이러한 오류가 발생하며, 금세 속도 제한(rate limit)에 걸립니다.
비공식 플러그인과 테마 중 어떤 것을 사용 중이신가요? 그중 하나가 큰 요청 부하를 발생시키고 있을 수 있습니다.
처음으로, 사용하지 않는 플러그인은 전부 주석 처리하는 것을 권합니다. 설치되어 있지만 비활성화된 상태여도 시스템에 부담을 줍니다.
먼저 서드파티 플러그인(초록색 체크 표시가 없는 플러그인)을 모두 비활성화해 보세요. 대부분 그 부분이 문제일 가능성이 높습니다.
초록색 체크 표시가 없는 모든 것을 제거하고 다시 빌드하세요.
다른 컴퓨터에서도 동일한 실패가 발생하는지 확인해 보세요. 디스크 공간이 부족하거나 다른 로컬 문제가 있을 수 있습니다.
모바일 브라우저에서는 잘 작동합니다
제 로컬 환경에서 문제가 발생하는 이유가 무엇인지 확인해 볼게요. 아마 디스크 공간 부족이나 느린 디스크 드라이브와 관련이 있을 것 같아요. 어쨌든, 불필요한 플러그인 몇 개를 제거한 건 좋은 일이에요 ![]()
일부 사용자들에 대해 여전히 이 문제를 겪고 있습니다.
아래에서 언급된 문제와 관련이 있을 것 같고, 해당 버전으로 업그레이드한 후에 이 문제가 발생하고 있습니다.
이 문제의 원인을 파악하지 못하고 있습니다. 신규 사용자에게는 정상적으로 작동하지만, 다른 사용자에게는 작동하지 않습니다. 이전에 discourse follow 플러그인을 사용하다가 주석 처리(비활성화)했는데, 그 이후에 이 문제가 발생하고 있습니다. 해당 플러그인을 제거했기 때문에 이런 문제가 발생하는 것일까요? 아마도 팔로워가 있거나 그 플러그인을 사용했던 사용자들에게서 발생하는 것 같습니다. 사실 좀 무리한 추측이지만, 이 플러그인이 원인이 될 수 있을까요?
네, 그럴 가능성이 있습니다. 해당 플러그인은 우리가 소유하고 있지 않아서 그것이 실제로 원인인지 여부는 알 수 없습니다. 플러그인을 다시 활성화해 보고 확인해 보세요. 문제가 해결되면 플러그인 관련 게시판에 보고해 주세요.
@Falco 네, 이 문제가 해결됩니다. discourse-follow 플러그인을 다시 추가했는데 문제가 해결되었습니다. 감사합니다 ![]()




