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 ?
