ich richte eine Discourse-Instanz für eine Organisation ein, die derzeit eine Mailingliste nutzt. Wir haben die Mails (20.000 Nachrichten) ohne größere Probleme importiert, jedoch zeigen sich in vielen Beiträgen E-Mail-Adressen durch Zitate, E-Mail-Signaturen usw.
Ich bin mit den rake/rails-Befehlszeilenbefehlen recht vertraut, habe aber Schwierigkeiten herauszufinden, wie ich diese E-Mail-Adressen entfernen kann. Ich habe verschiedene Varianten davon ausprobiert (mit und ohne Regex), aber es werden keine Beiträge gefunden.
Gibt es einen besseren Weg, dies zu tun? Ich habe mit einem einfachen Regex begonnen, um zuerst meine eigene Adresse zu finden (und ja, ich habe ein Backup!).
Da es sich um eine neue Discourse-Instanz handelt, mache ich mir keine Sorgen darum, @-Erwähnungen usw. zu entfernen.
Hier ist ein kurzes Skript, das @pfaffman für uns geschrieben hat. Alle unzulänglichen Teile sind Änderungen von mir. Es enthält einige Funktionen, die Sie möglicherweise nicht benötigen, beispielsweise ein Stichtagsdatum, sodass E-Mail-Adressen nur aus Beiträgen vor diesem Datum entfernt werden.
Ich habe festgestellt, dass es am besten ist, Adressen durch ‘email@removed.com’ zu ersetzen, anstatt sie vollständig zu entfernen. Ich kann mich nicht mehr erinnern, warum – ich denke, es verhielt sich in Kombination mit umgebenden Klammern besser.
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