Tengo un sitio de Rails ejecutándose en localhost:5000 y un servidor local de Discourse en localhost:3000. Quiero habilitar comentarios en artículos (que en mi caso es un recurso de Rails), por lo que configuré un host incrustable en el panel de administración de Discourse:
Este es el fragmento de script que he añadido en mi vista de 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);
})();
Estoy recibiendo el mensaje “Cargando discusión…” pero nada más. He intentado rastrear el problema y esto es lo que creo que está ocurriendo.
En Sidekiq, el trabajo Jobs::RetrieveTopic falla con Jobs::HandledExceptionWrapper: Wrapped FrozenError: can't modify frozen String.
He rastreado el error en el código hasta la línea 192 del método TopicEmbed.absolutize_url:
prefix = "#{uri.scheme}://#{uri.host}"
prefix << ":#{uri.port}" if uri.port != 80 && uri.port != 443
Dado que mi puerto es 5000 (ni 80 ni 443), el código intenta concatenar el puerto a la cadena de prefijo y se lanza un FrozenError. El trabajo RetrieveTopic tiene el comentario de pragma # frozen_string_literal: true. De hecho, intenté eliminarlo como experimento, pero el problema persiste, así que no estoy seguro de si todas las literales de cadena están congeladas por defecto en Discourse.
¿Alguna sugerencia sobre cómo hacer que esto funcione localmente? Además, si las literales de cadena realmente deberían estar congeladas, ¿se trata de un error?
