views:

113

answers:

3

I want to clear and re-load my developer database (Ruby on rails) frequently.

Of course, I can manually add the data via the web page but I was wondering if anyone has any strategies for this type of testing.

(I already have unit, functional and integration tests, fyi)

Thanks

+1  A: 

Time to look at "fixtures" and "seeding data" ;-) I am not good enough to give you a clear explanation, but googling those two keys should give you all you need.

Check these out: http://derekdevries.com/2009/04/13/rails-seed-data/
http://lptf.blogspot.com/2009/09/seed-data-in-rails-234.html

Trevoke
+2  A: 

I use a Capistrano task to load the production data into my development. Here is a post on how to do it.

http://www.blog.bridgeutopiaweb.com/post/capistrano-task-for-loading-production-data-into-your-development-database/

or

http://blog.robseaman.com/2008/12/2/production-data-to-development

I find this to be super useful

Jonathan
+3  A: 

Create a seed.yml file in db directory. Add a YAML document for each model you want to create. This document should contain a list of hash. Each hash should contain model attributes.

  users:
      -   login: jake
          password: jake123
          password_confirmation: jake123
          first_name: Jake
          last_name: Driver

      -   login: Jane
          password: jane123
          password_confirmation: jane123
          first_name: Jane
          last_name: McCain

  categories:

  products:

In your seed.rb file

seed_file = File.join(Rails.root, 'db', 'seed.yml')
config = YAML::load_file(seed_file)
User.transaction do 
  config.keys.each{ |key| key.classify.constantize.create(config[key]) }
end

I find it easier to modify the seed data in the YML file. Application that I have built is deployed by a different team. They like this approach too.

To clear the data I have a rake task in lib\tasks directory. I run the rake task as app:flush.

namespace :app do
  desc "Flush all the seed data "
  task :flush => :environment do
    config = YAML::load_file(File.join(Rails.root, 'db', 'seed.yml'))
    User.transaction do 
      config.keys.each{ |table| truncate_table(table)}
    end
  end
end
KandadaBoggu
easy and rakeable
Sam