Reset the database (purge all), then seed a database

116,433

Solution 1

I use rake db:reset which drops and then recreates the database and includes your seeds.rb file. http://guides.rubyonrails.org/migrations.html#resetting-the-database

Solution 2

You can delete everything and recreate database + seeds with both:

  1. rake db:reset: loads from schema.rb
  2. rake db:drop db:create db:migrate db:seed: loads from migrations

Make sure you have no connections to db (rails server, sql client..) or the db won't drop.

schema.rb is a snapshot of the current state of your database generated by:

rake db:schema:dump

Solution 3

As of Rails 5, the rake commandline tool has been aliased as rails so now

rails db:reset instead of rake db:reset

will work just as well

Solution 4

If you don't feel like dropping and recreating the whole shebang just to reload your data, you could use MyModel.destroy_all (or delete_all) in the seed.db file to clean out a table before your MyModel.create!(...) statements load the data. Then, you can redo the db:seed operation over and over. (Obviously, this only affects the tables you've loaded data into, not the rest of them.)

There's a "dirty hack" at https://stackoverflow.com/a/14957893/4553442 to add a "de-seeding" operation similar to migrating up and down...

Solution 5

on Rails 6 you can now do something like

rake db:seed:replant This Truncates tables of each database for current environment and loads the seeds

https://blog.saeloun.com/2019/09/30/rails-6-adds-db-seed-replant-task-and-db-truncate_all.html

$ rails db:seed:replant --trace
** Invoke db:seed:replant (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke db:truncate_all (first_time)
** Invoke db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke db:load_config
** Execute db:check_protected_environments
** Execute db:truncate_all
** Invoke db:seed (first_time)
** Invoke db:load_config
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke db:load_config
** Execute db:abort_if_pending_migrations
** Execute db:seed:replant
Share:
116,433

Related videos on Youtube

Blankman
Author by

Blankman

... .. . blank

Updated on February 17, 2022

Comments

  • Blankman
    Blankman about 2 years

    Is there a rake command to wipe out the data in the database tables?

    How do I create a db:seed script to pre-fill data to my tables?

  • etusm
    etusm over 9 years
    Side note to this: if in Production, you might have to restart the rails server for changes to appear/pages to update.
  • m02ph3u5
    m02ph3u5 about 7 years
    clever, recreating everything from scratch everytime took to long for me
  • aardvarkk
    aardvarkk over 6 years
    Thanks for reminding people to turn off any servers to make sure the DB gets dropped properly.
  • Sami Birnbaum
    Sami Birnbaum over 3 years
    Great solution - far more simple and less intrusive then having to drop the whole db!
  • MZaragoza
    MZaragoza over 3 years
    I am glad that this was able to help. I think this is the way that it should be done in 2020, but again this original question was asked in 2010
  • Sami Birnbaum
    Sami Birnbaum over 3 years
    Given it's a Rails 6 feature - it would appear the rails devs agree with you 😎