Sto configurando un’istanza di Discourse per un’organizzazione che attualmente utilizza una mailing list. Abbiamo importato le email (20.000 messaggi) senza problemi maggiori, ma ci sono molti post in cui gli indirizzi email delle persone appaiono a causa di citazioni, firme delle email, ecc.
Sono abbastanza pratico con la riga di comando rake/rails, ma faccio fatica a capire come rimuovere questi indirizzi email. Ho provato varie forme di questo (regex e non regex), ma non trova mai nessun post.
Ecco uno script veloce scritto per noi da @pfaffman. Le parti scadenti sono quelle che ho modificato io. Include alcune funzioni extra che potresti non aver bisogno, ad esempio una data di taglio per rimuovere gli indirizzi email solo dai post precedenti a tale data.
Ho scoperto che è meglio sostituire gli indirizzi con ‘email@removed.com’, piuttosto che rimuoverli completamente. Non ricordo il motivo, ma credo che si integrasse meglio con le parentesi circostanti.
def remove_email_addresses
n=0
test_mode=false
dt=DateTime.new(2019, 1, 1, 0, 0, 0)
no_emails="email@removed."
Post.where("raw like '%@%'").find_each do |post|
sleep 0.1
if post.created_at < dt
post.raw.gsub!(/[a-z0-9+-_.]+@[a-z0-9+-]+[. ,;\\]/i,no_emails)
if test_mode
puts post.raw
sleep 10
end
post.save unless test_mode
post.rebake! unless test_mode
puts "saved"
n+=1
puts n.to_s
else
puts "nuovo post, lasciato invariato"
end
end
nil
end
> remove_email_addresses