أقوم بإعداد نسخة Discourse لمنظمة تستخدم حاليًا قائمة بريدية — قمنا باستيراد البريد (20 ألف رسالة) دون مشاكل كبيرة، ومع ذلك هناك العديد من المنشورات حيث تظهر عناوين البريد الإلكتروني للأشخاص بسبب الاقتباسات، والتوقيعات البريدية، وما إلى ذلك.
أنا ملم بشكل معقول بأوامر سطر الأوامر الخاصة بـ Rake و Rails، لكنني أواجه صعوبة في معرفة كيفية إزالة هذه العناوين البريدية. لقد جربت أشكالًا مختلفة من ذلك (باستخدام تعبيرات نمطية regex وبدونها)، لكنها لا تجد أي منشورات على الإطلاق.
إليك سكريبت سريع كتبه @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