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

Буду очень признателен за любые предложения, с чего начать устранение этой проблемы. Спасибо!

Попробуйте открыть ваш сайт в безопасном режиме, чтобы проверить, загружается ли он.

Я сделал это. Выглядит идентично, и я получаю те же ошибки.

О, кстати, я только что попробовал войти в другую учётную запись без прав администратора или модератора, и она загружается нормально, насколько я могу судить. У меня есть доступ к трём разным типам учётных записей, и вот результаты моих экспериментов:

  • учётная запись администратора — > не работает
  • учётная запись модератора (с ограниченным доступом к панели администратора) — > не работает
  • обычная учётная запись — > работает нормально

Похоже, проблема возникает только тогда, когда в боковом меню есть ссылка «Администрирование», так как именно она должна была появиться сразу под пунктом «Проверка» на скриншоте выше. Возможно, это поможет?

Также, если это важно, старая инстанция, с которой я сделал резервную копию, не была на последней версии 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 с оранжевым облаком? Если да, отключите его.

У меня возникла похожая проблема, которая, кажется, появилась сегодня или вчера. Мои административные маршруты не работают, и меню сломано.

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 отключена и что вы очистили кэш.

Они прекратили поддержку этой функции, так как она не работает с современными возможностями JavaScript (которые сейчас использует Discourse).

Мы откатили это изменение из-за проблем с Cloudflare и Safari 15.

Поэтому @Ryan_Hyer, если вы снова обновите Discourse, всё должно вернуться в норму.

(однако я всё же настоятельно рекомендую отключить все функции «оптимизации» JS от Cloudflare, такие как Rocket Loader и авто-минификация)

Спасибо! Git pull показывает, что у меня уже самая последняя версия, значит, изменение ещё не доступно?

Насколько я знаю, мы используем Cloudflare только для DNS и защиты от DDoS-атак, ничего больше. Но да, у нас была включена оранжевая облачная иконка. Я только что её отключил, и мой сайт, кажется, работает без сбоев — отлично! Спасибо, ребята!

Это оранжевое облако без каких-либо изменений от настроек по умолчанию по сути означает «сломать мой сайт».

У нас есть руководство о том, что нужно настроить, если вы используете его.

Спасибо, это помогло. Я отключил авто-минификацию, очистил кэш, выполнил принудительное обновление страницы, и всё снова заработало.