Estoy configurando una instancia de Discourse para una organización que actualmente usa una lista de correo. Importamos los correos (20 000 mensajes) sin problemas mayores, pero hay muchas publicaciones donde aparecen las direcciones de correo electrónico de las personas debido a las citas, firmas de correo, etc.
Tengo un conocimiento bastante sólido de la línea de comandos de Rake/Rails, pero me cuesta averiguar cómo eliminar estas direcciones de correo. He probado varias formas de esto (con regex y sin regex), pero nunca encuentra ninguna publicación.
¿Hay una mejor manera de hacerlo? Empecé con una expresión regular sencilla para encontrar mi propia dirección primero (¡y sí, tengo una copia de seguridad!).
Dado que se trata de una nueva instancia de Discourse, no me preocupa eliminar menciones con @ ni nada similar.
Aquí tienes un script rápido que @pfaffman escribió para nosotros. Las partes deficientes son las que yo modifiqué. Tiene algunas funciones adicionales que quizás no necesites, como una fecha de corte para que solo elimine direcciones de correo electrónico de las publicaciones anteriores a esa fecha.
Descubrí que lo mejor era reemplazar las direcciones con ‘email@removed.com’, en lugar de eliminarlas por completo. No recuerdo por qué; creo que funcionaba mejor con los corchetes circundantes.
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 "new post, leaving as-is"
end
end
nil
end
> remove_email_addresses