vincentp
(Vincent)
1
みなさんこんにちは
現在メーリングリストを利用している組織のために、Discourse インスタンスをセットアップしています。メール(2万通)をインポートしましたが、大きな問題はありませんでした。ただし、引用やメール署名などにより、多くの投稿でメールアドレスが表示されてしまっています。
rake や Rails のコマンドラインにはある程度慣れていますので、これらのメールアドレスを削除する方法がわからないことに苦労しています。正規表現や非正規表現など、いくつかの形式を試してみましたが、投稿が見つかりません。
rake posts:remap["<vincent@domain\\.com>","","regex"]
rake posts:remap["\\<vincent@domain\\.com\\>","","regex"]
より良い方法はありませんか?まずは自分のメールアドレスを見つける簡単な正規表現から始めました(もちろんバックアップは取っています)。
これは新しい Discourse インスタンスですので、@メンションなどを削除することについては懸念していません。
ありがとうございます。
これは @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