Discourse のコメントが「読み込み中...」で固まっている

こんにちは。

ここ数日、Discourseで「View Full Post」ボタンをクリックしても「Loading…」のままになっていることに気づきました。

さらに、Drupalウェブサイト内の埋め込みから新しいDiscourseコメントが表示されなくなりました。長年、以下のJavaScript埋め込み手順を正常に使用してきましたが、

なぜか最近機能しなくなりました。最後に機能した投稿は今月初めの1日頃だったと思います。古い投稿はDiscourseおよび埋め込みモジュールに表示されますが、最近の新しい記事では、Discourseブロックが「Loading…」テキストでハングアップしています。

Discourse Drupalモジュールは、以下のコードからロードされます。

<div id="discourse-comments">
 <script type="text/javascript">
            var discourseUrl = "https://discourse.sitename.com/",
            discourseEmbedUrl = "http://sitename.com/node/' . $nid . '";

            (function() {
              var d = document.createElement("script"); d.type = "text/javascript"; d.async = true;
              d.src = discourseUrl + "javascripts/embed.js";
              (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(d);
            })();
          </script>
 </div>

「javascripts/embed.js」ファイルが同じパスにまだ存在することを確認しました。
これは記事ページに表示されるブロックですが、最近は「Loading Discussion…」と表示されるだけです。
image

過去数年間、Discourseの埋め込みや設定に変更はありませんでした。この問題を発生させるようなDiscourseの機能変更は最近ありましたか?この問題を解決するのを手伝っていただけると幸いです!

「いいね!」 2

当社のサイトでも同じ埋め込み機能を使用しています。discourseUrldiscouseEmbedUrl は、上記で投稿されたものではなく、フォーラムの関連 URL であると仮定します。

それ以外は、コードは問題ないように見えます。最新の Discourse ベータ版で埋め込み機能が動作していることはわかっています。先週は多くの投稿が埋め込まれました。投稿の最初の部分が埋め込まれているのに、「投稿全体を表示」ボタンが機能しないのは奇妙だと思います。当社の場合はすぐに読み込まれます :thinking:

コンソールでエラーを確認しましたか?

embed_truncate 設定を無効にして、投稿全体が投稿されるかどうかを確認することもできます。これにより、問題の原因を絞り込むのに役立つかもしれません。

最近、テーマをアップグレードまたは変更しましたか?それとも、本当に何年もアップグレードしていないということですか?

「いいね!」 1

はい、その通りです。明確にするためにサイト名プレースホルダーを使用しました。
まったく、Discourseの埋め込み機能が壊れていないようで安心しました!こちら側の問題のようです。

Discourseのログ(discourse.sitename.com/logs)を確認しましたが、以下のような多くの非推奨通知しか見つかりませんでした。

非推奨通知: SiteSetting.enable_personal_messages は非推奨になりました。

埋め込みの切り捨て(embed_truncate)も無効にすることを試すことができます。次にそれを探します。しかし、その機能は何年も問題なく動作していたので、なぜ壊れたのかわかりません…

「いいね!」 2

show full post ボタンをクリックしたときに、開発者ツールのコンソールでエラーを確認してみてください。開発者ツールは、右クリックして「検証」を選択することでアクセスできます。エラーは右側に赤色で表示されます。

ええ、埋め込み機能は間違いなく壊れていません。私のサイトでは1日に何度も発生しています。

最新のベータ版はDiscourse 3.1.0.beta4で、安定版リリースはhttps://meta.discourse.org/t/3-0-3-security-and-bug-fix-release/262045です。

「いいね!」 2

設定は管理されていると思いますが、変更は加えていません。しかし、Discourseダッシュボードには、Discourseの最終更新日が4月18日と表示されています。それにリンクされている最新のアナウンスを見ると、3.0.3のようです。

「いいね!」 1

最新のDiscourseバージョンも実行していることを確認してください。セーフモードでも同じことが発生しているかどうかを確認する価値があるかもしれません。

それは良い考えですね、ありがとうございます!確認したところ、このエラーが表示されています。

Uncaught DOMException: 無効または不正な文字列が指定されました

postUp embed-application.js:6
onload embed-application.js:36

EventHandlerNonNull* embed-application.js:25

<anonymous> embed-application.js:66

[embed-application-4e18c443be26cb7c50c56d1a8f39fcf176af9b4ae8e42243648f33c23d9b7eb9.js:5](https://conversation.spectrummagazine.org/assets/embed-application-4e18c443be26cb7c50c56d1a8f39fcf176af9b4ae8e42243648f33c23d9b7eb9.js)

postUp embed-application.js:6
onload embed-application.js:36

(Async: EventHandlerNonNull)

<anonymous> embed-application.js:25

<anonymous> embed-application.js:66

コードやその他最近何も変更していないので、とても奇妙です。しかし、セキュリティを強化するために今月2日にCloudflareを使用していたことを思い出しました。スクリプトをブロックしている可能性のあるものを確認する必要があるかもしれません。

前回確認した際に開発者ツールのコンソールでCSPエラーを見たので、それが問題である可能性があり、Cloudflare側で発生しているのかもしれません。

「いいね!」 1

これが原因だと思います。

親サイトがオンラインコンテンツポリシーとセキュリティ設定を一度編集したとき、埋め込みが数日間ブロックされたことを知っています。ただし、効果は異なり、フォーラムに投稿するのではなく、逆方向の埋め込みをブロックしました。

「いいね!」 1

おお、良い考えですね!これを修正するために変更する必要があったセキュリティ設定をご存知ですか?
いくつか変更を加えたので、具体的にどれを元に戻すべきか確信が持てません。

さあ、わかりません。サイトのその部分は私が管理していません。セキュリティポリシー設定を元に戻すために、ホスティングしている人々に電話をかけなければなりませんでした。

そのボタンがクリックされたことについて、あまり喜んでいないようです。

問題の原因を特定できました!弊社のマネージドDiscourseサポートに問い合わせたところ、以前に大量のトラフィックがあったためWAFのブロックリストに追加していたIPアドレスを提供してもらいました。そのIPアドレスがDiscourseが正常に通信するために許可する必要があることが判明しました。Discourse側の問題ではなくて本当に良かったです!

「いいね!」 5

ええ、私が遭遇した問題と少し似ていますね。解決してよかったです :slight_smile:

「いいね!」 2

同じ問題を抱えている可能性があります。ブラウザの開発者コンソールにこれらのDOMExceptionエラーが表示されています。ただし、Cloudflareは使用していません。Discourseのiframeを埋め込んでいる私のブログはNetlifyでホストされており、Discourse自体はCommuniteqでホストされています。

当初、この変更が問題を引き起こしていると思っていました。

しかし、今は別の原因かもしれないと考えています。何かお手伝いいただければ幸いです。

Netlifyのサーバーからセキュリティやネットワーク設定にアクセスできますか?最近の経験から、もし私があなたの立場だったら、IPアドレスがブロックされていないかセキュリティ設定を確認します。Communiteqサポートにも再確認することをお勧めします。彼らは、Discourseリソースを表示するために必要なスクリプトを正常に実行するために、NetlifyサーバーがCommuniteqと通信するために必要なIPアドレスを確認できるかもしれません。

「いいね!」 1

こんにちは。ご協力ありがとうございます。

Communiteq に連絡しました。

Netlify 側で何ができるかわかりませんが、調べてみます。問題はそこにあるとは思いにくいです。なぜなら、技術的にはリクエストは私のサイトへの訪問者のブラウザから来ているからです。もし私の理解が正しければ、そして間違っていれば教えてください。これはサイト訪問者のブラウザで実行されるクライアントサイド JavaScript です。Discourse はリクエストでサーバーのホスト名を見ますが、IP アドレスは見ません。私のブログサーバーはフォーラムサーバーと通信しません。いずれにせよ、静的ブログのインストールです。HTML とクライアントサイド JavaScript のみです。ブログ投稿データを Discourse に送信し、フォーラムから iframe で何かを読み込むスクリプトを使用しています。

「いいね!」 1

問題は、最新の Discourse バージョンでのバグであることが判明しました。Communiteq が私のフォーラムインスタンスでそれを修正しています。詳細については、こちらをご覧ください。

この問題は別の問題であることに注意してください。

このトピックの問題は、埋め込まれたサイトがブログ投稿のコンテンツをDiscourseに提供することを拒否したため、DiscourseがDiscourseで「投稿全体を表示」できないことでした。

@fabsh のトピック topic の問題は、(より最近の) Discourse のセキュリティ パッチの結果であり、問題が含まれています。

「いいね!」 3

こんにちは。この問題に関する調査で変更点があったため、アップデートを投稿します。問題は 3.0.4 へのアップデート以降も続いており、新しく作成されたすべての記事で埋め込み Discourse コードの表示に問題が発生しています。このアップデートより前に作成されたすべての記事には問題がないため、IP アドレスのブロックが原因ではありません。

最新バージョンでは、Discourse が埋め込みコードによって投稿が自動的に作成される仕組みのロジックを変更したようで、新しいコードでは正規 URL が必要になりました。以前リンクしたトピックを参照してください。

しかし、これは私のサイトのようなサイトでは埋め込み機能を完全に壊してしまいます。以前は Drupal のノード ID を使用して埋め込んでいました。コードを以下に示します。

discourseEmbedUrl = "http://sitename.com/node/' . $nid . '";

この新しい Discourse コードでは、代わりに正規 URL を使用する必要があります。これにより、記事のタイトルを変更しただけで重複トピックが作成されることになります。ノード ID が変更されないため、ノード ID を使用していた理由はそこにありました。

この新しい正規 URL をオプションにすることは可能でしょうか?埋め込みコードを変更してこれを使用しようとしましたが、古い埋め込みコードで作成されたすべての投稿で読み込みの問題が再発しました。

現在、本番サイトで新しい Discourse コードを実行しているため、次の 2 つの選択肢のいずれかに固定されています。

  • Drupal で新しく作成された記事は「読み込み中…」と表示されますが、コメント埋め込みブロックは読み込まれません。Discourse 3.0.4 より前に作成された古い記事は正常に読み込まれます。

または、

  • Drupal で新しく作成された記事はコメント埋め込みブロックを正常に読み込みますが、Discourse 3.0.4 より前に作成されたすべての古い記事は「読み込み中…」と表示されますが、コメント埋め込みブロックは読み込まれません。

この新しい機能をオプションにすることはできますか?これらの選択肢のいずれかを選択しなければならない状況は、ある種の負け戦です。

「いいね!」 2