Algo que, à primeira vista no desenvolvimento, parecia estar tudo certo foi a forma como as postagens foram migradas. No navegador, a maioria parece boa, mas, por baixo dos panos, há muitas tags HTML antigas que quebram coisas ao carregar imagens, importá-las para o armazenamento local e assim por diante.
Existe uma maneira inteligente de remover a marcação HTML de todas as postagens após a migração?
Outra questão: também preciso corrigir muitos URLs de http para https.
Obrigado pela ajuda. Aliás, o script improvisado que forneci definitivamente deve ser aprimorado para cuidar melhor do processamento das postagens para o formato de post do Discourse (não está no meu conjunto de habilidades)…
É mais fácil corrigir esses problemas no importador. Se você já colocou o site no ar e isso não é uma opção, fica mais difícil. Você só precisa escrever código para modificar o texto bruto e refazer os posts. Não há mágica, temo eu.
Parece que você está enfrentando o problema descrito aqui: Fix broken images for posts created by the WP Discourse and RSS plugins. Minha primeira resposta naquele tópico fornece alguns detalhes sobre o que causa o problema. O problema afeta imagens em posts que foram criados com HTML. Vou atualizar o título daquele tópico para deixar claro que ele afeta mais do que apenas posts criados com o plugin WP Discourse ou um feed RSS.
Idealmente, o analisador de markdown do Discourse seria capaz de lidar com tags de imagem HTML que estão envoltas em outras tags HTML. Acredito, no entanto, que seja um problema difícil de corrigir.
Sim, esse é exatamente o fenômeno com as minhas imagens quebradas dentro de outras tags HTML.
Comecei a corrigir manualmente, mas é trabalhoso e fica ainda mais complicado porque isso faz o post subir para o topo da lista de mais recentes. Isso exige um reset manual do bump, etc.
Vou seguir em frente e tentar entender a lógica para remover as tags HTML, analisando alguns posts bem problemáticos. Depois, talvez precise de ajuda para automatizar isso em todo o banco de dados. Vou tentar usar o Data Explorer para resolver essa parte. O Data Explorer permitiria atuar como um IDE para realizar essas transformações nos posts?
Oi, consegui descobrir como fazer a limpeza de forma manual e também corrigir as imagens quebradas. No entanto, gostaria de automatizar esse processo.
O que eu gostaria de fazer é encontrar uma maneira de remover todas as tags HTML, como [P], [/P] e [BR/].
Pesquisei no fórum, mas não encontrei nada parecido. Também procurei nos scripts de importação, mas não há um importador de Discourse para Discourse para servir de base. Acredito que preciso de um script que:
acesse a tabela de posts;
itere sobre todos os posts;
itere sobre cada post:
–> remova as tags P completamente;
–> substitua BR/ por uma quebra de linha;
–> faça algo inteligente com URLs;
–> faça algo inteligente com imagens;
recrie (rebake) todos os posts, provavelmente.
Alguém pode me indicar alguma discussão relevante no Discourse, ou alguém tem algum script ou trecho de código que possa me ajudar a começar? Não sou um desenvolvedor experiente, mas consigo modificar coisas que já funcionam…
Compartilharei com a comunidade assim que alcançar meu objetivo.
posts=Post.where("raw like '%Sent from%using Tapatalk'")
posts.each do |post|
post.raw.gsub!(/^Sent from my.+?using Tapatalk$/,"")
post.save
post.rebake!
end
Acho que você não precisa fazer algo “inteligente” para imagens ou URLs, a menos que estejam de alguma forma quebradas.
Você quer algo como
post.raw.gsub!(/\/?\[p\]/ig,"\n")
para substituir [p] e [/p] por uma nova linha (uma linha extra não fará mal, mas você pode remover o \n se achar que não precisa de uma nova linha), mas eu não testei, então isso provavelmente está errado. Você pode testar em algo como https://rubular.com/.
Quando migramos nosso fórum, tivemos inúmeros problemas com esses códigos e tags do BBCode provenientes de quase duas décadas de postagens no fórum.
Não usamos a função rake remap para isso e, em todos os casos, utilizamos a técnica que @pfaffman descreve no trecho de código dele:
O trecho de código acima, usando gsub(), resume uma das melhores maneiras de limpar as postagens brutas após (ou, melhor ainda, durante) a migração.
Certifique-se de testar suas expressões REGEX ANTES de implementá-las de verdade no banco de dados e tenha um backup completo antes de realizar operações como essas diretamente no seu banco de dados.
Olá, abaixo está o conteúdo do meu script/cleanup.rb que executo usando: RAILS_ENV=development bundle exec ruby script/cleanup.rb
Conteúdo do arquivo:
require_relative '../config/environment'
pm = 0
Post.find_each do |test|
test.raw.gsub!(/<(.|\/.)>/i,"")
test.save
test.rebake!
pm = pm + 1
end
puts "cycled through #{pm} posts"
Tentei executar rake posts:rebake, que rebakeou 1757 posts. O script percorre apenas 1712 posts, que são os importados com as tags HTML, enquanto o restante são novos criados no Discourse.
Acho que estou chegando perto, mas ao inspecionar o conteúdo bruto na interface do usuário, continuo vendo todas as tags HTML.
Tentei reiniciar o ambiente e relançar o unicorn, mas sem sucesso. Tão perto… tão perto ;o)
Usei sua sugestão do Rubular e agora o regexr.com está assim, conforme a captura de tela abaixo. Por enquanto, foquei nas tags p e r para resolvê-las antes de adicionar as mais complexas.
Quando adicionei uma instrução put ao meu pequeno cleanup.rb para imprimir o conteúdo bruto do post no CLI, notei que nenhuma tag HTML foi exibida.
No entanto, ao editar qualquer post, vejo o seguinte, com as tags HTML na mão direita. Isso não parece ser o cenário normal, pois quando retorno para editar o post que estou editando agora, não vejo as tags HTML…
Esse gsub precisa de um ‘g’ após o ‘/i’ para corresponder a várias tags. Mas se o que você vê no seu puts for diferente do que aparece após a execução do script, então não tenho uma explicação.
Após executar isso algumas vezes, o cleanup.log continua contendo 10 instâncias de <p> em cerca de 21.000 linhas de material bruto dos posts. Estranhamente, esses nunca são removidos.
Ainda mais estranho (para mim) é que, quando inicio o unicorn e acesso o site no meu computador local, ainda vejo as tags HTML em todos os posts que verifico na visualização bruta do editor.
Parece que não estou olhando para o mesmo ambiente, talvez? O d/unicorn acessa um ambiente de produção local enquanto meu script aplica alterações no desenvolvimento?
Estou tentando fazer isso funcionar usando o ambiente de desenvolvimento com o guia do Docker localmente primeiro, antes de ir para o meu site ao vivo.
Deve ser alguma coisa básica de iniciante que estou ignorando.