Creating Seed Files from Your Database with Sprig-Reap
Ryan Stenberg, Former Developer
Article Category:
Posted on
Recently, Lawson and Ryan launched Sprig, a gem for seeding Rails applications.
Sprig seed files are easy to write, but they do take some time -- time which you may not have enough of. We wanted to generate seed files from records already in the database, and we received similar requests from other Sprig users. At Viget, we try to give the people what the people want, so I jumped in and created Sprig-Reap!
Introducing Sprig-Reap
Sprig-Reap is a rubygem that allows you to generate Sprig-formatted seed files from your Rails app's database.
It provides both a command-line interface via a rake task and a method accessible inside the Rails console.
Command Line
rake db:seed:reap
Rails Console
Sprig.reap
The Defaults
Sprig-Reap, by default, will create a seed file for every model in your Rails app with an entry for each record. The .yml
seed files will be placed inside the db/seeds/env
folder, where env
is the current Rails.env
.
Don't like these defaults? No problem!
Customizing the Target Environment Seed Folder
Sprig-Reap can write to a seeds folder named after any environment you want. If the target folder doesn't already exist, Sprig-Reap will create it for you!
# Command Line
rake db:seed:reap TARGET_ENV='dreamland'
# Rails Console
Sprig.reap(target_env: 'dreamland')
Customizing the Set of Models
You tell Sprig-Reap which models you want seeds for and -- BOOM -- it's done:
# Command Line
rake db:seed:reap MODELS=User,Post,Comment
# Rails Console
Sprig.reap(models: [User, Post, Comment])
Omitting Specific Attributes from Seed Files
Tired of seeing those created_at
/updated_at
timestamps when you don't care about them? Don't want encrypted passwords dumped into your seed files? Just ignore 'em!
# Command Line
rake db:seed:reap IGNORED_ATTRS=created_at,updated_at,password
# Rails Console
Sprig.reap(ignored_attrs: [:created_at, :updated_at, :password])
Reaping with Existing Seed Files
If you have existing seed files you're already using with Sprig, have no fear! Sprig-Reap is friendly with other Sprig seed files and will append to what you already have -- appropriately assigning unique sprig_ids
to each entry.
Use Case
If you're wondering what the point of all this is, perchance this little example will pique your interest:
At Viget, QA is a critical part of every project. During the QA process, we generate all kinds of data so we can test all the things. Oftentimes this data describes a very particular, complicated state. Being able to easily take a snapshot of the application's data state is super helpful. Sprig-Reap lets us do this with a single command -- and gives us seed files that can be shared and re-used across the entire project team. If someone happens to run into a hard-to-reproduce issue related to a specific data state, use Sprig-Reap for great justice!
Your Ideas
We'd love to hear what people think about Sprig-Reap and how they're using it. Please share! If you have any comments or ideas of your own when it comes to enhancements, leave a comment below or add an issue to the GitHub repo.