Commit 83d521927f8c2aa9684c38f0e2ccc81cbbbd6aa4
1 parent
a6178cf3
Exists in
master
and in
21 other branches
restore:remove_emails: removes actual emails from database
This is useful when you are loading a database dump from a production database for local tests, and you don't want people's emails there in order to avoid accidental outgoing email.
Showing
1 changed file
with
29 additions
and
0 deletions
Show diff stats
lib/tasks/backup.rake
... | ... | @@ -111,3 +111,32 @@ task :restore => :check_backup_support do |
111 | 111 | puts "Backup restored!" |
112 | 112 | puts "****************************************************" |
113 | 113 | end |
114 | + | |
115 | +desc 'Removes emails from database' | |
116 | +task 'restore:remove_emails' => :environment do | |
117 | + connection = ActiveRecord::Base.connection | |
118 | + [ | |
119 | + "UPDATE users SET email = concat('user', id, '@localhost.localdomain')", | |
120 | + "UPDATE environments SET contact_email = concat('environment', id, '@localhost.localdomain')", | |
121 | + ].each do |update| | |
122 | + puts update | |
123 | + connection.execute(update) | |
124 | + end | |
125 | + | |
126 | + profiles = connection.execute("select id, data from profiles") | |
127 | + profiles.each do |profile| | |
128 | + if profile['data'] | |
129 | + data = YAML.load(profile['data']) | |
130 | + if data[:contact_email] && data[:contact_email] !~ /@localhost.localdomain$/ | |
131 | + data[:contact_email] = ['profile', profile['id'], '@localhost.localdomain'].join | |
132 | + sql = Environment.send(:sanitize_sql, [ | |
133 | + "UPDATE profiles SET data = ? WHERE id = ?", | |
134 | + YAML.dump(data), | |
135 | + profile['id'], | |
136 | + ]) | |
137 | + puts sql | |
138 | + connection.execute(sql) | |
139 | + end | |
140 | + end | |
141 | + end | |
142 | +end | ... | ... |