Tenho um site Rails rodando em localhost:5000 e um servidor Discourse local rodando em localhost:3000. Quero habilitar comentários em artigos (que é um recurso do Rails no meu caso), então configurei um host incorporável no painel de administração do Discourse:
Este é o trecho de script que adicionei na minha view do 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);
})();
Estou recebendo a mensagem “Loading Discussion…” (Carregando discussão…), mas nada além disso. Tentei rastrear o problema e é isso que acho que está acontecendo.
No Sidekiq, o job Jobs::RetrieveTopic falha com Jobs::HandledExceptionWrapper: Wrapped FrozenError: can't modify frozen String.
Rastreei o problema no código até a linha 192 no método TopicEmbed.absolutize_url:
prefix = "#{uri.scheme}://#{uri.host}"
prefix << ":#{uri.port}" if uri.port != 80 && uri.port != 443
Como minha porta é 5000 (não é 80 nem 443), o código tenta concatenar a porta à string prefixo e um FrozenError é lançado. O job RetrieveTopic tem o comentário de pragma # frozen_string_literal: true. Na verdade, tentei removê-lo como um experimento, mas o problema persiste, então não tenho certeza se todas as literais de string são congeladas por padrão no Discourse.
Alguma dica sobre como fazer isso funcionar localmente? Além disso, se as literais de string realmente devem ser congeladas, isso é um bug?
