Versioned Seeds is an alternative to Rails seeds. It allows to store your seeds in several files and prevent from re-seeding.
Rails seeds are great when you create a project but what about new ones when the project is already running ? When you have to import some data from a CSV file ?
Versioned Seeds provides a simple, conventions based, way to do that.
Add this line to your
If you're using Git, as you should, be sure to call this in your shell :
$ echo ".versionned_seeds" >> .gitignore
You can get the last imported seeds version :
$ rake vs:status Last seeds: 0
VersionedSeeds can be configured using an initializer:
VersionedSeeds.configuration do |config| # Path where are stored seed files # VersionedSeeds will look for [root_path]/db/seeds/*.rb # Defaults to Rails.root config.root_path = '...' # Path of the .versioned_seeds file where the list of # already loaded seed files is stored config.list_path = '...' # end
The generator will simply generate a timestamped file where you can put anything you want :
$ rails g versioned_seeds:seed_file some_seeding_script create db/seeds/20111205155806_some_seeding_script.rb
Given two seeds files :
# db/seeds/20111205155801_create_users.rb User.create!(:username => 'admin', :password => 'password', :admin => true) User.create!(:username => 'user1', :password => 'password') # db/seeds/20111205155802_import_articles.rb require 'csv' CSV.foreach('/some/file.csv') do |line| # ... end
You can import only the first one by using the
vs:next task :
$ rake vs:next Loading: 20111205155801_create_users.rb $ rake vs:status Last seeds: 20111205155801
Or load all files using the
vs:all task :
$ rake vs:all Loading: 20111205155801_create_users.rb Loading: 20111205155802_import_articles.rb $ rake vs:status Last seeds: 20111205155802
Every script imported once will never be loaded again.