이 컴포넌트에 대한 피드백이나 의견은 항상 환영합니다. 모델을 표시하는 데 사용하는 model viewer 컴포넌트는 기능이 꽤 많아서, 그 기능을 일부 사용자에게 노출함으로써 이 컴포넌트를 확장할 여지가 꽤 있을 것입니다. 저는 insert video와 mermaid 컴포넌트를 복사하고 수정하여 이 컴포넌트를 만들었습니다. 따라서 Discourse 컴포넌트 작성 경험이 더 많은 분이 코드를 검토해 주시고 제가 범한 실수를 알려주셨으면 좋겠습니다.
감사합니다
Alan
사용법
컴포넌트가 설치되면 사용자는 컴포저의 새로운 큐브 아이콘을 클릭하여 게시글에 3D 모델을 추가할 수 있습니다.
이것이 호스팅된 Discourse에서 이 컴포넌트를 사용할 때의 주요 제한 사항일 가능성이 높습니다. 하위 구독 플랜에서는 최대 크기가 30MB로 제한되어 있기 때문입니다. 다만, 사용자가 거대한 파일을 업로드하는 것을 원치 않을 수도 있으며, Draco 메시 압축을 지원하는 프로그램으로 생성된 .glb와 .gltf 파일은 크기를 크게 줄일 수 있습니다.
제 포럼에서도 같은 일이 일어났습니다. 게시물을 살펴본 결과, 제 생각에는 며칠이 지난 후 Discourse가 업로드된 포스터 이미지와 3D 모델이 더 이상 필요하지 않다고 판단하여 서버에서 삭제한 것 같습니다.
저는 제 사이트에서 모델과 포스터를 다시 업로드하여 임시로 이 문제를 해결했지만, 이제 Discourse 테마 문서를 읽어가며 제대로 된 해결책을 찾고자 합니다. 테마 컴포넌트를 작성할 때 간단히 훑어본 문서에는 게시물이 에셋을 참조하는 한 서버에 유지된다고 되어 있었지만, 이 컴포넌트가 게시물에 넣는 URL은 어째서인지 그렇게 작동하지 않는 것 같습니다. 다른 플러그인 개발자분들 중 이 문제에 대해 조언해 주실 수 있는 분이 있다면 정말 감사하겠습니다…
네, 제 현재 가설은 마크다운으로 모델 뷰어를 참조할 때, 업로드된 모델의 URL이 포스트를 스캔하여 사용된 업로드를 식별하는 로직이 인식할 수 있는 올바른 형식이 아니라는 것입니다.
현재 저는 Discourse에서 파일이 업로드되는 다른 두 곳을 살펴보고 있습니다. 이미지/파일 업로드 모달에서는 'short_url’에 대한 참조가 유지되며, 이 URL은 브라우저가 리소스를 다운로드하는 데 사용되는 최종 URL이 아니라 upload:// 형식을 가지고 있습니다. 따라서 이 방식을 어떻게 사용해야 하는지 알아내야 할 수도 있습니다. 아니면 제 컴포넌트의 기반이 된 GitHub - discourse/discourse-insert-video · GitHub 컴포넌트는 리소스 URL을 직접 사용합니다. 해당 컴포넌트에도 동일한 버그가 있는 것일 수 있지만(가능성은 낮죠 ), 아니면 HTML 태그로 마크다운 메시지에 삽입되기 때문에 그 URL들이 인식되는 것일 수 있습니다(모델 뷰어 태그는 HTML 태그 화이트리스트에 포함되어 있지 않아 HTML 태그로 삽입할 수 없습니다).
제 현재 생각은 이렇습니다. 아니면 전혀 다른 문제일 수도 있겠지요. 이제 Discourse 사이트에서 고아 업로드를 식별하는 코드를 찾아볼 수 있는지 확인하러 가보겠습니다…
어쨌든, 방금 다시 살펴본 결과 업로드 파일이 유지되거나 삭제되는지를 결정하는 코드를 찾은 것 같습니다. 게시글을 처리하는 서버 측 코드에는 'each_upload_url’이라는 루틴이 있으며, 이는 게시글에서 참조된 업로드 파일 목록을 생성합니다.
저는 Ruby 개발자는 아니지만, 파악한 바로는 미리 정의된 HTML 태그 목록에 의해 참조되는 URL을 찾고 있는 것 같습니다. 따라서 제가 복사한 ‘영상 삽입’ 테마 컴포넌트의 경우, <source> HTML 요소의 src 속성과 <video> HTML 요소의 poster 속성은 업로드 파일로 인식됩니다. 하지만 제 ‘3D 모델 삽입’ 컴포넌트의 경우, <model-viewer> HTML 요소가 해당 목록에 포함되어 있지 않아 참조하는 자산이 업로드 파일로 인식되지 않고, 며칠 후 삭제(purged)됩니다.
장기적인 해결책은 서버 측 코드를 변경하여 model-viewer 속성을 업로드 소스로 인식하도록 하는 것일 수 있지만, 현재로서는 업로드를 가리키는 명시적인 HTML <a> 태그를 추가하여 우회할 수도 있다고 생각합니다.
제 이해가 맞는지 확인하기 위해 Contribute > Bug 카테고리에 게시글을 남길 예정입니다. 하지만 만약 제 이해가 맞다면, Insert Model 3D 테마 컴포넌트에 게시글 내에 업로드된 모델과 포스터를 참조하는 숨겨진 <a> 태그를 삽입하는 수정 사항을 제출했습니다. @patrickemin 시간이 되시면 이 수정 사항이 문제를 해결하는지 확인해 주실 수 있을까요? 컴포넌트를 업데이트한 후 삭제된 3D 모델 자산을 다시 업로드해야 합니다.
아, 그거 알아두면 유용하네요. 감사합니다, Robert. 호스팅된 Discourse에서 해당 체크나 동등한 작업을 수행할 수 있는지 아시나요? 불가능할 것 같은데요. @patrickemin 님의 서버가 자체 호스팅이라면 이걸 확인해 볼 좋은 기회가 될 수 있겠습니다.
또는, 제가 호스팅된 Discourse로 넘어가기 전까지 작업하던 Docker 기반의 로컬 Discourse 환경이 있습니다. 이번 기회에 다시 그쪽으로 돌아가 볼 좋은 핑계거리가 될 것 같습니다.