TL;DR: Discourse muestra “Error al incrustar” independientemente de los hosts que permita en la configuración de incrustación.
Tengo un sitio publicado en foo.com que incrusta comentarios del foro Discourse en forum.foo.com, lo cual funciona correctamente. Al acceder, por ejemplo, a https://foo.com/blog/2019-11-22/foo-0.9.6-released, los comentarios incrustados se ven sin problemas. En este caso, el código de script para la incrustación en el código fuente de la página se ve así:
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'https://foo.com/blog/2019-11-22/foo-0.9.6-released' };
(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);
})();
</script>
También tengo una versión de desarrollo del sitio ejecutándose en mi máquina local en localhost, donde tengo problemas con la incrustación: sigue mostrando “Error al incrustar” en lugar de los comentarios dentro del HTML generado y devuelto por el foro. Es decir, veo el logotipo del foro y un enlace a él en la esquina superior derecha del área de incrustación, pero en lugar de listar los comentarios solo obtengo ese mensaje de error.
Al acceder, por ejemplo, a http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/, que es la página equivalente a la del sitio de producción, el código de script para la incrustación en el código fuente de la página se ve así:
<div id='discourse-comments'></div>
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: 'https://forum.foo.com/', discourseEmbedUrl: 'http://localhost:1313/blog/2019-11-22-foo-0.9.6-released/' };
(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);
})();
</script>
Lo probé tanto con como sin la barra final en la configuración discourseEmbedUrl, pero no hace ninguna diferencia.
No tengo acceso directo al servidor donde se ejecuta el foro, pero he entrado en el panel de administración del foro e intentado agregar varios hosts permitidos en la configuración de incrustación. La configuración actual, para el sitio de producción que funciona con incrustación, es:
"Hosts permitidos", "Nombre de clase", "Lista blanca de rutas", "Publicar en categoría"
foo.com, <vacío>, /blog/.*, blog
Lo que he agregado para que funcione con mi versión de desarrollo local del sitio es:
"Hosts permitidos", "Nombre de clase", "Lista blanca de rutas", "Publicar en categoría"
localhost, <vacío>, /blog/.*, blog
localhost:1313, <vacío>, /blog/.*, blog
<mi IP externa/pública tal como la ve el servidor del foro>, <vacío>, /blog/.*, blog
<mi IP externa/pública tal como la ve el servidor del foro>:1313, <vacío>, /blog/.*, blog
Pero ninguna de estas opciones hace que funcione; sigo obteniendo el mismo mensaje de “Error al incrustar”.
Me resisto a meterme en el código fuente y tratar de depurar esto; preferiría recibir alguna orientación sobre qué está verificando Discourse cuando determina que debe generar ese mensaje de error. ¿Alguien puede decírmelo y cómo solucionarlo? Debería ser bastante sencillo, pero Discourse actúa como una caja negra aquí.
He leído todo en Embed Discourse comments on another website via Javascript, pero no ofrece información más útil.

