Manage your seed scripts by versioning them
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Project not maintained!

Versioned Seeds is not maintained anymore. Take a look at seedbank or seed_migration instead ;)

Versioned Seeds Build Status

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 Gemfile :

gem 'versioned_seeds'

If you're using Git, as you should, be sure to call this in your shell :

$ echo ".versionned_seeds" >> .gitignore


Get current version

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 = '...' #

Generate a seeding script

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

Loading the scripts

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

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.