요약: 임베딩 설정에서 어떤 호스트를 허용하든 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, <빈 값>, /blog/.*, blog
localhost 개발 버전 사이트에서 작동하도록 하기 위해 추가한 내용은 다음과 같습니다:
"Allowed Hosts", "Class Name", "Path Whitelist", "Post to Category"
localhost, <빈 값>, /blog/.*, blog
localhost:1313, <빈 값>, /blog/.*, blog
<포럼 서버가 인식하는 내 외부/공개 IP>, <빈 값>, /blog/.*, blog
<포럼 서버가 인식하는 내 외부/공개 IP>:1313, <빈 값>, /blog/.*, blog
그러나 이 중 어느 것도 작동하지 않으며, 계속 동일한 “Error Embedding” 메시지만 표시됩니다.
소스 코드를 파고들어서 디버깅을 시도하는 것보다, Discourse가 해당 오류 메시지를 생성해야 한다고 판단할 때 무엇을 확인하는지에 대한 정보를 얻고 싶습니다. 누군가 그 내용을 알려주고, 어떻게 수정해야 하는지 알려줄 수 있을까요? 꽤 직관적이어야 할 것 같은데, 여기서는 Discourse가 블랙박스처럼 작동하고 있습니다.
Embed Discourse comments on another website via Javascript 의 모든 내용을 읽었지만, 더 유용한 정보를 제공하지는 않습니다.

