Ao longo de alguns dias, notei que muitas pessoas pesquisaram e postaram soluções sobre a incorporação de comentários. Eu sou uma dessas pessoas. Espero que esta postagem ajude outras pessoas na mesma situação.
Sou novo no Discourse, então qualquer pessoa que deseje complementar as informações que estou fornecendo com conhecimento aprofundado, sinta-se à vontade para fazê-lo.
Uma coisa que posso dizer depois de revisar muitos posts sobre o assunto é que a origem dos problemas pode ser variada. Para aqueles na minha situação, aqui está uma solução!
Problema
- Você se encontra com um embed que diz “Carregando discussão…”
- Tópicos do Discourse não estão sendo criados automaticamente
Solução
Tente adicionar seu domínio à lista de hosts internos permitidos.
É uma configuração do site encontrada na área de administração. Você pode encontrá-las neste caminho do seu site Discourse:
/admin/site_settings/category/all_results
Um link direto para a configuração à qual me refiro seria:
/admin/site_settings/category/all_results?filter=allowed_internal_hosts
Para aqueles que estão olhando no console Rails, procure por:
SiteSetting.allowed_internal_hosts
A configuração é uma lista de nomes de domínio separados por pipe (|).
Contexto
Minha instância do Discourse é pública, mas meu DNS interno resolve alguns domínios localmente. Isso pode acontecer em configurações que usam Docker, Kubernetes ou qualquer ambiente com DNS interno.
Sendo novo no Discourse, devo dizer que o que parece óbvio agora, realmente não era óbvio no início.
Aqueles de nós que não estão familiarizados com os internos do Discourse não sabem que em 2017 a proteção SSRF foi implementada ou mesmo os detalhes dessa proteção. Somente em retrospectiva esse anúncio torna a conexão clara.
É um recurso bem implementado, mas foi um verdadeiro labirinto por um motivo muito simples.
O que você precisa saber
O Discourse não criará um tópico para seu embed se o domínio for resolvido para um IP local.
Não grite ainda, pessoal. Isso é algo bom. Você pode ler sobre SSRF para descobrir o porquê e também agradecer aos desenvolvedores do Discourse por levarem isso a sério.
O problema é que o Discourse não fornece feedback para nos informar por que não está criando os tópicos e por que está travado em “carregando discussão…”
Leitura Adicional
Mas, o que é exatamente um IP local? Para quem estiver interessado, você pode encontrar a resposta diretamente no código do Discourse, aqui está um link direto para o arquivo no GitHub.
Por exemplo, se sua instância do Discourse em super-forum[dot]com estiver em uma rede que também hospeda cool-blog[dot]net, seu DNS interno pode resolver cool-blog[dot]net como um IP local — que o Discourse rejeitará, a menos que esteja na lista de permissões.
Espero que esta postagem economize para outra pessoa algumas horas de dor de cabeça — e talvez até alguns cabelos.