Railsからはじめるプログラミング日記

駆け出しプログラマー(主にRuby on Rails)の業務で役立ったコードをメモしていくブログです。自分だけでなく誰かの役に立てれば本望です。

【Ruby 正規表現】開発環境に本番のデータを入れ込んでテストするときのメアド一括変更方法

ある日届く1通の不吉なメール

「○○のシステムについて、利用者からエラーが出るとの不具合報告があります」

こういうメールは心臓がヒュッとしますよね。

開発環境ですぐに原因が判明するような不具合ならいいですが、本番のデータで試さないと再現がとれないんじゃ困ります!

そんなときは本番のデータをdumpして情報書き換えてテストしちゃいましょう!

まずはデータをdumpする

まずは本番のデータを落としましょう。

sshでユーザログインし、データをdumpします。

pg_dump -O dumpするデータベース名 > 書き出すファイル名.dmp

これで「書き出すファイル名.dmp」というファイルができるので、scpで手元に転送します。

例えばこんな感じです(デスクトップに落としてます)。

scp sshユーザ名@サーバ名~/書き出すファイル名.dmp ~/Desktop

テスト用DBを作成してデータを流し込む

dmpファイルを落としたら、Rails側でテスト用DBを用意してあげましょう。

config/database.ymlに適当な名前でDB名を記載してcreateします。

rake db:create

DBができたらmigrateせずに、dmpファイルを流し込みます。

psql 新規作成したDB名 < ~/Desktop/書き出すファイル名.dmp

これで作成したDBに本番のデータが入ります。

本番用からテスト用にデータ整形

ここからが本題です!

本番データを流し込みましたが問題があります。

ユーザ管理があって、メールを飛ばす機能があるシステムだったら本人にメール飛んじゃいますよね?

そういう機能がないものならいいですが、だいたいユーザ管理ありますよね(ログインとか)。

そこでメアドを3行(省略すれば1行)で一括変換してしまいます。

※今回はgmailを想定し、先頭に「自分のアドレスの@以前+」を挿入し、@以降(ドメイン)を「gmail.com」に変換
例)自分のアドレスが「test@gmail.com」だったら「test+○○@gmail.com」に変換

まずは「rails c」でコンソールを立ち上げます。

そして下のコードを1行ずつ入れていくと…

User.all.each do |u|
  u.update(email: u.email.gsub(/\A(.*?)@.+\z/, 'test+\1@gmail.com'))
end

※先頭に文字列を入れないで@以降のみ変更したい場合はu.email.gsub(/@.+/, '@rabbix.jp')でOK

ユーザのメアドを一気に変換しちゃいます!

正規表現とgsubを使った便利な処理でした。