DumpTruck
A simple DSL to specify how to dump data from a production environment for use in a developer environment. Provides tools to limit what data is pulled and obfuscate data that is pulled.
Installation
Add this line to your application's Gemfile:
gem 'dump_truck'
And then execute:
$ bundle
Or install it yourself as:
$ gem install dump_truck
Usage
Create a ruby file that looks like this:
require 'logger'
DumpTruck.configure do
# You can optionally provide a logger. If no logger is provided,
# information will be logged to standard out.
logger Logger.new('dump.log')
# You can specify an arbitrary number of databases to connect to
database(:mysql) do
# Where and how to connect
hostname ENV['hostname']
user ENV['user']
password ENV['password'] # pass nil if there is no password
# The schemas to dump from this database.
schema 'app_production' do
# Directory to place the resulting sql dump
target_path ENV['target_path']
# File name for this schema sql dump. '.sql' is appended
# automatically to the name. If unspecified, the name of the schema
# is used.
target_file{|schema| schema + Time.now.strftime("_%Y%m%d%H%M%S")}
# Tables rules can be defined to have one of four modes:
# * keep - all data for that table is dumped
# * keep 'some query' - data that satifies the query is dumped
# * truncate - no data is dumped
# * ignore - the table and data are not dumped
#
# Tables also define obfuscation rules. If no rules is defined for
# a column, the value is dumped as is. Obfuscation rules can
# optionally receive the value and a number which will be unique
# for each row of that table. If an obfuscation rule is defined for
# a field that doesn't exist for the table, it is ignored. This
# is most useful for the default table rule, because it allows
# obfuscation of all email fields for tables that have them.
#
# The default table rule is applied to any table that does not have
# a rule defined. Otherwise, it behaves like any other table rule.
table_default do
keep "created_at > now() - interval 6 month"
obfuscate(:email){|email, n| "my.email+#{n}@gmail.com"}
end
table(:users) do
keep
obfuscate(:email){|email, n| "my.email+#{n}@gmail.com"}
obfuscate(:password){'password'}
obfuscate(:name){|name| name.split('').shuffle.join}
end
table(:delayed_jobs){keep "deleted_at is null"}
table(:roles){keep}
table(:emails){truncate}
table(:credit_cards){ignore}
end
end
end
Contributing
- Fork it ( http://github.com/secondrotation/dump_truck/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request