Commit 83d521927f8c2aa9684c38f0e2ccc81cbbbd6aa4

Authored by Antonio Terceiro
1 parent a6178cf3

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
... ...