L'intégration du widget de commentaires sur localhost provoque une FrozenError

J’ai un site Rails tournant sur localhost:5000 et un serveur Discourse local tournant sur localhost:3000. Je souhaite activer les commentaires sur les articles (qui constituent une ressource Rails dans mon cas), alors j’ai configuré un hôte intégrable dans le panneau d’administration de Discourse :

Voici l’extrait de script que j’ai ajouté dans ma vue 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);
 })();

Je reçois le message « Chargement de la discussion… » mais rien ne se passe ensuite. J’ai tenté de tracer le problème et voici ce que je pense se produire.

Dans Sidekiq, le travail Jobs::RetrieveTopic échoue avec Jobs::HandledExceptionWrapper: Wrapped FrozenError: can't modify frozen String.

J’ai remonté la piste dans le code jusqu’à la ligne 192 de la méthode TopicEmbed.absolutize_url :

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

Puisque mon port est 5000 (et non 80 ou 443), le code tente de concaténer le port à la chaîne prefix, ce qui déclenche une FrozenError. Le travail RetrieveTopic contient le commentaire pragmatique # frozen_string_literal: true. J’ai même essayé de le supprimer à titre expérimental, mais le problème persiste, donc je ne suis pas sûr que toutes les chaînes littérales soient figées par défaut dans Discourse.

Avez-vous des conseils pour faire fonctionner cela en local ? Par ailleurs, si les chaînes littérales sont effectivement censées être figées, s’agit-il d’un bug ?

Discourse ne prend pas en charge l’exécution sur des ports non standard.