Una cosa che a prima vista, in fase di sviluppo, sembrava essere perfettamente a posto era il modo in cui i post sono stati tutti migrati. Nel browser la maggior parte appare corretta, ma sotto la superficie ci sono molti tag HTML legacy che causano problemi nel caricamento delle immagini, nell’importazione nello storage locale e così via.
Esiste un modo intelligente per rimuovere il markup HTML dai post dopo la migrazione di tutti i post?
Un’altra domanda: devo anche correggere molti URL da http a https.
Grazie per il vostro aiuto. A proposito, lo script provvisorio che ho fornito dovrebbe sicuramente essere modificato per gestire meglio l’elaborazione dei post nel formato post di Discourse (non è nelle mie competenze)…
È più semplice risolvere questi problemi nell’importatore. Se sei già andato online e questa non è un’opzione, allora è più difficile. Devi semplicemente scrivere del codice per modificare il testo grezzo e rigenerare i post. Non c’è nulla di magico, temo.
Sembra che tu stia riscontrando il problema descritto qui: Fix broken images for posts created by the WP Discourse and RSS plugins. La mia prima risposta in quel topic fornisce alcuni dettagli sulle cause del problema. Il problema riguarda le immagini nei post creati con HTML. Aggiornerò il titolo di quel topic per chiarire che il problema non riguarda solo i post creati con il plugin WP Discourse o un feed RSS.
Idealmente, il parser Markdown di Discourse dovrebbe essere in grado di gestire i tag HTML per le immagini racchiusi in altri tag HTML. Tuttavia, penso che si tratti di un problema difficile da risolvere.
Sì, è esattamente il fenomeno che si verifica con le mie immagini rotte all’interno di altri tag HTML.
Ho iniziato a correggere manualmente, ma è un processo laborioso e si complica ulteriormente perché sposta il post in cima alla lista degli ultimi. Ciò richiede un reset manuale del bump, ecc.
Procederò cercando di capire la logica per rimuovere i tag HTML esaminando alcuni post davvero problematici. Potrei poi aver bisogno di aiuto per automatizzare il processo su tutto il database; proverò a usare Data Explorer per risolvere questa parte. Data Explorer permette di agire come un IDE per eseguire queste trasformazioni dei post?
Non vedo l’ora di affrontare la curva di apprendimento.
Ciao, sono riuscito a trovare un modo per pulire manualmente e correggere anche le immagini rotte. Tuttavia, vorrei farlo in modo automatico.
Ciò che vorrei fare è trovare un metodo per rimuovere tutti i tag HTML come [P] e [/P] e [BR/].
Ho cercato nel forum ma non ho trovato nulla di simile. Ho anche controllato gli script di importazione, ma non contengono un importatore da Discourse a Discourse con cui iniziare. Penso di aver bisogno di uno script che:
acceda alla tabella dei post
iteri su tutti i post
iteri all’interno di ogni post:
–> rimuova completamente i tag P
–> sostituisca BR/ con un carattere di nuova riga?
–> gestisca in modo intelligente gli URL
–> gestisca in modo intelligente le immagini
rigeneri probabilmente tutti i post.
Qualcuno può indicarmi una discussione pertinente su Discourse, o ha qualcuno uno script o degli snippet con cui iniziare? Non sono uno sviluppatore esperto, ma posso modificare cose che già funzionano…
Condividerò con la comunità non appena avrò raggiunto il mio obiettivo.
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
Non credo sia necessario fare qualcosa di “intelligente” per le immagini o gli URL, a meno che non siano in qualche modo danneggiati.
Potresti usare qualcosa del genere:
post.raw.gsub!(/\/?\[p\]/ig,"\n")
per sostituire [p] e [/p] con una nuova riga (una riga vuota in più non fa male, ma puoi rimuovere \n se non ritieni necessaria una nuova riga), ma non l’ho testato, quindi probabilmente è errato. Puoi provarlo su qualcosa come https://rubular.com/.
Quando abbiamo migrato il nostro forum, abbiamo avuto innumerevoli problemi di questo tipo relativi a bbcode e tag, provenienti da quasi due decenni di post del forum.
Non abbiamo utilizzato la funzione rake remap per questi casi e, in tutti i casi, abbiamo usato la tecnica che @pfaffman descrive nel suo frammento di codice:
Questo frammento di codice sopra, che utilizza gsub(), riassume uno dei modi migliori per pulire i post grezzi dopo (o, meglio ancora, durante) la migrazione.
Assicurati di testare le tue espressioni REGEX PRIMA di implementarle effettivamente sul DB e di avere un backup completo prima di eseguire operazioni di questo tipo direttamente sul tuo DB.
Ciao, di seguito il contenuto del mio script script/cleanup.rb che avvio con: RAILS_ENV=development bundle exec ruby script/cleanup.rb
Contenuto del file:
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"
Ho provato a eseguire rake posts:rebake, che ha rigenerato 1757 post. Lo script invece scorre solo 1712 post, ovvero quelli importati con i tag HTML, mentre il resto sono nuovi post creati in Discourse.
Penso di essere quasi arrivato alla soluzione, ma quando ispeziono il contenuto raw nell’interfaccia utente continuo a vedere tutti i tag HTML.
Ho provato a riavviare l’ambiente e a rilanciare Unicorn, ma senza successo. Così vicino… così vicino ;o)
Ho usato il tuo suggerimento rubular e ora regexr.com, vedi lo screenshot qui sotto. Per ora mi sono limitato ai tag p e r e li sto sistemando prima di aggiungere quelli più complessi.
Quando ho aggiunto un’istruzione put al mio piccolo cleanup.rb per stampare il contenuto grezzo del post sulla riga di comando, ho notato che non venivano stampati affatto tag HTML.
Tuttavia, quando modifico un post, vedo quanto segue, con i tag HTML sul lato destro. Questa non sembra essere la situazione normale, perché quando torno a modificare il post che sto attualmente modificando, non vedo i tag HTML…
Quella gsub ha bisogno di una ‘g’ dopo la ‘/i’ per abbinare più tag. Ma se ciò che vedi nel tuo puts è diverso da ciò che vedi dopo l’esecuzione dello script, allora non ho una spiegazione.
Grazie, ha funzionato dal lato dell’espressione regolare.
Sembra esserci qualcosa che non riesco a spiegare con questo script:
# Esegui in questo modo:
# RAILS_ENV=development bundle exec ruby script/cleanup.rb -> cleanup.log
require_relative '../config/environment'
pm = 0
Post.find_each do |test|
puts test.raw
test.raw.gsub!(/<(.|\/. )>/im,"")
test.save
test.rebake!
pm = pm + 1
end
puts "ciclo completato su #{pm} post"
dopo averlo eseguito alcune volte, cleanup.log continua a contenere 10 istanze di <p> in circa 21.000 righe di materiale grezzo dei post. Stranamente, questi non vengono mai rimossi.
ancora più strano (per me) è che, quando avvio unicorn e accedo al sito dal mio computer locale, vedo ancora i tag HTML in tutti i post che controllo nella vista grezza dell’editor.
Sembra che non stia guardando lo stesso ambiente, forse? Unicorn punta a un ambiente di produzione locale mentre il mio script applica le modifiche a quello di sviluppo?
Sto cercando di far funzionare tutto usando l’ambiente di sviluppo seguendo la guida Docker in locale prima di passare al sito live.
Deve esserci qualcosa di basilare che sto trascurando, da principiante.