HiveBrain v1.2.0
Get Started
← Back to all entries
gotcharubyrailsCritical

Difference between rake db:migrate db:reset and db:schema:load

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
resetmigrateloadandbetweendifferencerakeschema

Problem

The difference between rake db:migrate and rake db:reset is pretty clear to me. The thing which I don't understand is how rake db:schema:load is different from the former two.

Just to be sure that I am on the same page:

  • rake db:migrate - Runs the migrations which haven't been run yet.



  • rake db:reset - Clears the database (presumably does a rake db:drop + rake db:create + rake db:migrate) and runs migration on a fresh database.

Solution

-
db:migrate runs (single) migrations that have not run yet.

-
db:create creates the database

-
db:drop deletes the database

-
db:schema:load creates tables and columns within the existing database following schema.rb. This will delete existing data.

-
db:setup does db:create, db:schema:load, db:seed

-
db:reset does db:drop, db:setup

-
db:migrate:reset does db:drop, db:create, db:migrate

Typically, you would use db:migrate after having made changes to the schema via new migration files (this makes sense only if there is already data in the database). db:schema:load is used when you setup a new instance of your app.

For rails 3.2.12:

I just checked the source and the dependencies are like this now:

-
db:create creates the database for the current env

-
db:create:all creates the databases for all envs

-
db:drop drops the database for the current env

-
db:drop:all drops the databases for all envs

-
db:migrate runs migrations for the current env that have not run yet

-
db:migrate:up runs one specific migration

-
db:migrate:down rolls back one specific migration

-
db:migrate:status shows current migration status

-
db:rollback rolls back the last migration

-
db:forward advances the current schema version to the next one

-
db:seed (only) runs the db/seed.rb file

-
db:schema:load loads the schema into the current env's database

-
db:schema:dump dumps the current env's schema (and seems to create the db as well)

-
db:setup runs db:create db:schema:load db:seed

-
db:reset runs db:drop db:setup

-
db:migrate:redo runs (db:migrate:down db:migrate:up) or (db:rollback db:migrate) depending on the specified migration

-
db:migrate:reset runs db:drop db:create db:migrate

For further information please have a look at https://github.com/rails/rails/blob/v3.2.12/activerecord/lib/active_record/railties/databases.rake (for Rails 3.2.x) and https://github.com/rails/rails/blob/v4.0.5/activerecord/lib/active_record/railties/databases.rake (for Rails 4.0.x)

Context

Stack Overflow Q#10301794, score: 1540

Revisions (0)

No revisions yet.