Я настраиваю экземпляр Discourse для организации, которая сейчас использует рассылку — мы импортировали письма (20 тысяч сообщений) без серьёзных проблем, однако во многих постах из-за цитирования, подписей в письмах и т.п. отображаются адреса электронной почты.
Я достаточно хорошо разбираюсь в командной строке rake/rails, но не могу понять, как удалить эти адреса. Я пробовал разные варианты (с регулярными выражениями и без), но ни один не находит ни одного поста.
Вот быстрый скрипт, который @pfaffman написал для нас. Всё, что получилось неуклюже, — это мои правки. В нём есть несколько дополнительных функций, которые могут вам не понадобиться, например, дата отсечки, чтобы удалять адреса электронной почты только из постов, созданных до этой даты.
Я обнаружил, что лучше заменять адреса на ‘email@removed.com’, а не удалять их полностью. Не помню точно почему — думаю, это лучше сочетается с окружающими скобками.
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