Estou configurando uma instância do Discourse para uma organização que atualmente usa uma lista de e-mails. Importamos os e-mails (20 mil mensagens) sem grandes problemas, no entanto, há muitas postagens onde os endereços de e-mail das pessoas aparecem devido a citações, assinaturas de e-mail etc.
Tenho um conhecimento razoável dos comandos de linha do rake/rails, mas estou com dificuldade para descobrir como remover esses endereços de e-mail. Tentei várias formas disso (regex e não regex), mas nenhum deles encontra nenhuma postagem.
Aqui está um script rápido que @pfaffman escreveu para nós. As partes ruins são coisas que eu mudei. Ele tem alguns recursos extras que você pode não precisar, como uma data de corte para que ele remova apenas endereços de e-mail de postagens anteriores a essa data.
Achei melhor substituir os endereços por ‘email@removed.com’, em vez de removê-los completamente. Não me lembro o motivo — acho que funcionava melhor com os colchetes ao redor.
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 "nova postagem, deixando como está"
end
end
nil
end
> remove_email_addresses