サーバー移行後、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

それを実行しました。見た目は全く同じで、同じエラーが発生します。

ああ、それと、管理権限やモデレーター権限のない別のアカウントにログインしてみたところ、私の知る限り問題なく読み込めました。私は3種類のアカウントにアクセスでき、実験の結果は以下の通りです。

  • 管理者アカウント → 壊れている
  • モデレーターアカウント(管理者ダッシュボードへのアクセスが制限されている) → 壊れている
  • 通常アカウント → 問題なく動作する

サイドバーメニューに「Admin」リンクが含まれている場合にのみ問題が発生するようです。これは、上記のスクリーンショットの「Review」項目のすぐ下に表示されるはずのものです。何かヒントになるでしょうか?

また、もし関係があるなら、バックアップ元の古いインスタンスは最新のDiscourseではありませんでした。確か3.1.2のようなバージョンだったと思います。新しいインスタンスはもちろん最新です。

問題は、管理者のJavaScriptファイルの一つに構文エラーがあり、それがadminルートが登録されないという副作用を引き起こしていることです。

コンソールで、構文エラーがスローされているファイルを展開またはアクセスすることはできますか?現時点では、何が間違っているのかを判断するには情報が限られています。

はい、ただし、それは連結された1行の最小化された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 が現在使用している最新の JavaScript 機能に対応していないため、非推奨となりました。

「いいね!」 1

CloudflareとSafari 15の問題により、変更を元に戻しました。

そのため、@Ryan_Hyer さん、Discourseを再度アップグレードすれば、通常の状態に戻るはずです。

(ただし、Rocket Loaderや自動ミニファイなどのCloudflareのJavaScript「最適化」機能はすべて無効にすることを強くお勧めします)

「いいね!」 3

ありがとうございます!Git pullによると、すでに最新の状態なので、変更はまだ利用可能ではないということでしょうか?

CloudflareはDNSとDDoS保護にしか使用していないと思いますが、他に何も使用していません。しかし、はい、オレンジ色の雲が有効になっていました。ちょうどオフにしたところ、私のサイトは壊れていないようです。素晴らしい!皆さんありがとう!

「いいね!」 2

デフォルトから何も調整せずに表示されるこのオレンジ色のクラウドは、基本的に「サイトが壊れる」ことを意味します。

Cloudflare を使用している場合に設定すべきことについては、ガイドがあります。

「いいね!」 1

ありがとうございます、それで解決しました。自動ミニファイを無効にし、キャッシュをクリアして、ハードリフレッシュを行ったところ、再び動作するようになりました。

「いいね!」 3

このトピックは、最後の返信から30日後に自動的にクローズされました。新しい返信は許可されていません。