Creating Seed Files from Your Database with Sprig-Reap
Ryan Stenberg, Former Developer
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!
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.
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
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
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.
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!
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.