rake db migrate with down, up, redo, rollback options
rake db migrate - This can be used to migrate your production/test database using various options like up, down, step, redo, version etc. In this tutorial we will learn how all these options can be used with rake tool to migrate the database.
What is rake?
rake is basically ruby make. i.e. make tool for ruby
It has similar functionality to the make tool that you may have used on unix based systems for comopiling running some kind of script.
rake allows you to ruby particular task in the environment that you specify.
How to Install rake?
You can install rake by installing gem ‘rake’ as,
Above command will install the latest version of rake tool avaialable.
Various rake db migrate commands
Operation | Command | Description |
---|---|---|
General | rake db:migrate | This will migrate your database by running migrations that are not run yet |
Running specific Migration | rake db:migrate VERSION=20130717110623 | This runs specific migration file from your db/migrate directory having version 20130717110623 |
Running up from migration | rake db:migrate:up VERSION=20130717110623 | This runs up part from your migration |
Running down from migration | rake db:migrate:down VERSION=20130717110623 | This runs down part from your migration |
Re-Running Specific Migration | rake db:migrate:redo VERSION=20130717110623 | This will first run down part and then up part of the migration having version 20130717110623 |
Re-Running all migrations | rake db:migrate:redo | This will re-run all the migrations |
Rollback a migration | rake db:rollback | This will rollback last run migration(i.e. Default STEP=1) |
Rollback last n migrations | rake db:rollback STEP=4 | This will rollback last 4 migrations. |
These are the few of the operations that can be performed using Ruby Make i.e. rake tool on database. You can find more on rake on source page.
RAILS_ENV(Environment) under consideration -
Whenever you try any of the above command rake by default considers development as the database in use as you have not passed environment for consideration. You can explicitly pass the environment argument as follows,
The above command when executed rake will use production database to perform migration operation.
How rake db migrate decides which migrations to be run -
This question is resolved by rake using schema_migrations table in your database which maintains versions of the migrations that have been already run on your database. And whenever you try to run rake db migrate then it check the codebase and schema_migrations entries and difference helps deciding which migrations to be run from the codebase.
Subscribe to Ruby in Rails
Get the latest posts delivered right to your inbox