Ghost 댓글 통합의 Discourse 문제 해결

새로운 설정이 Discourse를 진정한 댓글 시스템으로 만들어 주셨기에, 특히 여러 블로그의 댓글 시스템을 하나의 포럼 시스템으로 결합하는 용도로 사용할 때 그 효과가 뚜렷합니다. 이 점에 대해 진심으로 감사드립니다. 하지만 불행히도 여러 가지 문제들이 발생하고 있습니다.

외관상의 문제들은 일단 제쳐 두고, 저는 이 설정이 Ghost 블로그와 함께 작동하도록 하려고 노력하고 있다는 점을 먼저 지적하겠습니다. 이 블로그는 Discourse on Ghost (DoG) 통합을 통해 Ghost와 Discourse의 멤버십 시스템을 통합하고 있습니다 (Discourse 포럼에서 여기에 발표됨). 제가 겪고 있는 문제 중 일부는 DoG 사용 때문인 것으로 확신하지만, 다른 문제들은 그렇지 않고, 또 다른 문제들은… 어쩌면 그럴까요?

먼저 지적할 것은, 제가 “완전한” 댓글 시스템이 아닌, 그 절반 정도에 가까운 것만 보고 있다는 점입니다.

네, DoG를 통해 전체 가입 과정을 거친 후 “접근 허용” 팝업이 표시되고, 저는 이를 동의했습니다.

하지만 그 후, 데모 Discourse 블로그 게시물에서 보았던 것처럼 각 댓글 뒤에 “답장” 버튼이 보이지 않을 뿐만 아니라, 링크 아이콘도 Discourse 블로그에서 보는 것과 현저히 다릅니다(이것은 Discourse 포럼이 사용하는 테마의 결과일 수도 있습니다). 또한, 게시물 하단으로 스크롤하면 새로운 설정의 일부는 존재하지만, 왼쪽에 나타날 것으로 생각했던 공유와 답장 버튼이 없고, 유일한 답장 버튼은 오른쪽에 있습니다(Discourse 블로그에서 본 것과 다른 화살표 아이콘이 있으며, 이 아이콘은 원래 임베드 시스템의 복고풍이거나 포럼 자체에서 사용되는 테마와 관련이 있다고 추정됩니다).

더욱이, 그 답장 버튼을 클릭하면 새로 통합된 댓글 상자가 나타나는 대신 블로그 포럼의 홈페이지로 이동합니다. 그렇게 되면, 위의 “37/37” 댓글 수 버튼을 클릭하면 실제로 상자가 나타나고, “이동” 버튼과 댓글 사이를 "스크롤"할 수 있는 기능이 있지만, 댓글로 "스크롤"하여 마우스 버튼을 놓으면 댓글 임베드 내의 위치가 이동하지 않습니다(상자가 그냥 닫힙니다).

명확히 하기 위해, 제 임베드 코드는 다음과 같습니다:

<section itemscope itemtype="http://schema.org/UserComments" class="post-item post-comments" id="comments" loading="lazy">
    <div class="wrapper post-wrapper{{#is "post"}} no-post-border{{/is}}">
        <h2 class="comments-title">
            <a href="#comments" class="heading-link">
                <svg aria-hidden="true" class="aal_svg" version="1.1" viewBox="0 0 16 16">
                    <path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path>
                </svg>
            </a>
            Comments</h2>
        <div id='discourse-comments'></div>
        <meta name='discourse-username' content='DISCOURSE_USERNAME'>
        <script type="text/javascript">
            if (window.location.pathname.indexOf('/p/') < 0) {
                DiscourseEmbed = {
                    discourseUrl: 'https://ff2f.discourse.group/',
                    discourseEmbedUrl: '{{url absolute="true"}}',
                    fullApp: true,
                    dynamicHeight: true,
                    };
                (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>
    </div>
</section>

그리고 네, 제 사이트 포럼 설정에서 전체 앱 모드 토글이 켜져 있습니다.

저가 어떤 토글을 활성화하지 못했거나 코드 한 줄을 포함하지 못했기 때문일까요, 아니면 새로운 전체 댓글 시스템과 DoG 사이의 어떤 종류의 호환성 문제일 수 있을까요?

수정 #1: 실제로는 코드 한 줄이 빠져 있었습니다. fullApp: true와 dynamicHeight: true 외에 추가해야 할 것이 더 있다는 사실을 실수로 인지하지 못했기 때문입니다. 그러나 누락된 <meta name='discourse-username' content='DISCOURSE_USERNAME'>을 삽입해도 아무런 변화가 없었습니다.

수정 #2: 누락된 <meta name='discourse-username' content='DISCOURSE_USERNAME'>을 추가한 직후 임베드를 조작해 보다가, "스크롤바"를 사용할 때 마우스 버튼을 놓으면 댓글 임베드 내의 위치가 이제 올바른 위치로 이동하는 것을 우연히 발견했습니다. 추가된 코드 때문일 것이라고는 상상할 수 없지만, 결과가 그렇습니다.

수정 #3: 아. Discourse 블로그와 로그인 과정을 조작해 보았는데, 이것은 어떤 식으로든 DoG와 관련된 문제인 것 같습니다. 왜냐하면 포럼 쪽에서 로그인하지 않은 상태에서 Discourse 블로그의 임베드 모습은 제가 "절반"이라고 부른 댓글 시스템과 정확히 같기 때문입니다.

즉, 로그인 과정을 거친 후에도, 블로그의 임베드는 사용자가 포럼에 로그인했다는 것을 인식하지 못하고 있습니다(비록 "본인 계정으로 댓글을 남기려면 세션 접근을 허용하세요"라는 팝업이 나타났음에도 불구하고).

정말 바로 그 목적을 위해 만들었습니다!

이것은 Safari에서만 발생하는 요구사항이라는 점도 언급할 가치가 있습니다.

이는 단순히 사용자가 Discourse에 로그인하지 않은 상태, 즉 “로그인 안 됨” 모드입니다.

같은 브라우저에서 blog.discourse.org에서는 정상적으로 작동한다면, 이는 아마도 사용자 정의 DoG 설정과 관련된 문제일 가능성이 높습니다.

만약 그것이 단순히 "정식 댓글 시스템"이 아니라, 제가 말했듯이 "여러 개의 집계 블로그의 댓글 시스템을 하나의 포럼 시스템으로 결합하는 설정"을 의미한다면, 저는 Ghost를 다양한 방식으로 활용하면서 해당 이니셔티브를 선두에서 이끌고 있습니다. DoG가 이미 구축된 상태에서, 저는 현재 누군가에게 베타 테스트를 돕고 있으며, 이는 뉴스레터 다이제스트 기능입니다. 이 기능을 통해 독자들은 다양한 주제와/또는 저자 중에서 선택하여 단일 블로그 또는 집계 사이트에서 자신의 주간/월간 이메일을 맞춤 설정할 수 있습니다. 다음 단계는 집계 기능 자체일 것이며, 이 새로운 Discourse 전체 댓글 시스템은 그 위에 올라가는 아이싱(마무리 장식)이 될 것입니다.hopefully 모든 것이 가능한 한 빨리 준비될 수 있기를 바랍니다.

그 말은 일리가 있습니다. 저는 다른 사용자 역할을 테스트해 보기 위해 서로 다른 브라우저를 통해 로그인하고 있었기 때문에, 해당 팝업이 Safari에서만 발생한다는 사실을 알아차리지 못했습니다. 하지만 당신이 그 점을 지적해 주었고, 다크 모드와 관련된 또 다른 Safari 문제(이것은 곧 스플릿 스레드에서 Thiago에게 메시지를 보낼 예정입니다)를 통해, 스크롤 바를 놓았을 때 위치가 이동하지 않던 제가 겪었던 스크롤 문제는 Safari에서만 발생하는 것이 아니라, 특정 매개변수가 생략될 때만 발생한다는 것을 알게 되었습니다. Safari를 사용하면서 Thiago가 공유한 블로그 게시물을 열면 스크롤 바가 의도한 대로 작동하는 것을 볼 수 있습니다. 그의 설정은 다음과 같습니다:

fullApp: true,
lazyLoad: true, // iframe의 지연 로딩 비활성화
lazyLoadMargin: '1500', // 뷰포트에서 로딩을 시작하기까지의 픽셀 수
dynamicHeight: true,
embedMinHeight: '400',
embedMaxHeight: '1500',

그러나 Safari를 사용하면서 제 사이트의 블로그 게시물을 방문하여 스크롤 바를 사용해 보면 작동하지 않는 것을 볼 수 있습니다. 스크롤 바를 놓으면 몇 픽셀 정도 위아래로 미세하게 점프하는 것 외에는 아무 일도 일어나지 않습니다. 제 블로그의 설정은 다음과 같습니다:

fullApp: true,
dynamicHeight: true,

제 설정을 Thiago의 것으로 교체해 보았을 때, 문제는 사라졌습니다.

이것은 제 역량 범위(“pay grade”)를 약간 벗어나지만, DoG의 제작자와 이야기해 본 결과, 그는 이것이 실제로는 Discourse 측의 문제일 수 있다고 생각합니다. 그가 제게 말한 내용은 다음과 같습니다:

동의하지 않습니다. 이것은 임베디드 컨텍스트에서의 Auth와 관련된 것입니다. 임베드 URL을 새 탭에서 열면 작동합니다. 하지만 임베드를 볼 때는 작동하지 않습니다. 제 문제가 아니라는 것을 확인하기 위해 하드 리프레시를 했습니다.

그리고 그가 제게 공유한 두 이미지는 다음과 같습니다:

당신에게도 그럴듯하게 들립니까?