TL;DR: 許可するホストを埋め込み設定でどれに変更しても、Discourse は「Error Embedding(埋め込みエラー)」を返します。
私は foo.com という公開済みのサイトを持っており、forum.foo.com にある Discourse フォーラムからコメントを埋め込んでいます。これは正常に動作しています。例えば https://foo.com/blog/2019-11-22/foo-0.9.6-released にアクセスすると、埋め込まれたコメントが正しく表示されます。この場合、ページソース内の埋め込み用スクリプトコードは以下のようになっています。
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'https://foo.com/blog/2019-11-22/foo-0.9.6-released' };
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
また、ローカルマシンで localhost 上で開発バージョンのサイトを動作させていますが、ここでは埋め込みに問題が発生しています。フォーラムから返される HTML 内にコメントが表示される代わりに、「Error Embedding」というエラーメッセージが表示され続けています。つまり、埋め込み領域の右上にはフォーラムのロゴとリンクが表示されますが、コメント一覧の代わりにエラーメッセージが表示されるだけです。
例えば http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/ にアクセスすると、本番環境のページと同等のページになりますが、ページソース内の埋め込み用スクリプトコードは以下のようになっています。
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/' };
(function() {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
discourseEmbedUrl 設定の末尾にスラッシュ(/)を付けるか付けないかで試しましたが、違いはありませんでした。
フォーラムが動作しているサーバーには直接アクセスできませんが、フォーラムの管理パネルに入り、埋め込み設定で複数のホストを許可するよう試みました。現在、埋め込みが正常に動作している本番サイトの設定は以下の通りです。
"Allowed Hosts", "Class Name", "Path Whitelist", "Post to Category"
foo.com, <empty>, /blog/.*, blog
ローカル開発バージョンのサイトで動作させるために追加したのは以下の通りです。
"Allowed Hosts", "Class Name", "Path Whitelist", "Post to Category"
localhost, <empty>, /blog/.*, blog
localhost:1313, <empty>, /blog/.*, blog
<フォーラムサーバーから見た私の外部/公開 IP アドレス>, <empty>, /blog/.*, blog
<フォーラムサーバーから見た私の外部/公開 IP アドレス>:1313, <empty>, /blog/.*, blog
しかし、これらを追加しても動作せず、同じ「Error Embedding」メッセージが表示され続けています。
ソースコードを調べてデバッグするのは気が引けるため、Discourse がどのような基準でそのエラーメッセージを生成するかについて、何か知見があれば教えていただきたいです。この問題の原因と解決方法を教えていただけないでしょうか?非常にシンプルなものだと思いますが、Discourse はここではブラックボックスのように振る舞っています。
Embed Discourse comments on another website via Javascript はすべて読みましたが、それ以上の有用な情報は得られませんでした。

