localhost에서 댓글 위젯을 임베드하면 FrozenError 발생

localhost:5000에서 실행 중인 Rails 사이트와 localhost:3000에서 실행 중인 로컬 Discourse 서버가 있습니다. 기사(제 경우 Rails 리소스)에 댓글 기능을 활성화하려고 하므로 Discourse 관리자 패널에서 임베디더블 호스트(embeddable host)를 설정했습니다:

Rails 뷰에 추가한 스크립트 스니펫은 다음과 같습니다:

<div id='discourse-comments'></div>

<script type="text/javascript">
  DiscourseEmbed = { discourseUrl: 'http://localhost:3000/',
                 discourseEmbedUrl: '<%= "http://localhost:5000/articles/#{@article.id}" %>'};

  (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);
 })();

“Loading Discussion…” 메시지는 표시되지만 그 이후로는 아무것도 나오지 않습니다. 문제를 추적해 보았으며, 현재 다음과 같이 파악하고 있습니다.

Sidekiq에서 Jobs::RetrieveTopic 작업이 Jobs::HandledExceptionWrapper: Wrapped FrozenError: can't modify frozen String 오류로 실패합니다.

코드를 추적해 보니 TopicEmbed.absolutize_url 메서드의 192번째 줄에서 문제가 발생하는 것을 확인했습니다:

prefix = "#{uri.scheme}://#{uri.host}"
prefix << ":#{uri.port}" if uri.port != 80 && uri.port != 443

제 포트가 5000(80 또는 443이 아님)이므로 코드가 포트 번호를 prefix 문자열에 연결하려고 시도하고 FrozenError가 발생합니다. RetrieveTopic 작업에는 # frozen_string_literal: true 프래그마 주석이 있습니다. 실제로 실험으로 이를 제거해 보았지만 문제가 여전히 지속되므로, Discourse에서 모든 문자열 리터럴이 기본적으로 고정(frozen)되어 있는지 확실하지 않습니다.

로컬에서 이 기능을 작동시키는 방법에 대한 팁이 있을까요? 또한 문자열 리터럴이 실제로 고정되어야 한다면, 이는 버그인가요?

Discourse는 비표준 포트에서 실행하는 것을 지원하지 않습니다.