Reputation: 9334
I would like to remove/delete a migration file. How would I go about doing that? I know there are similar questions on here but as an update, is there a better way than doing script/destroy?
Also, should I do a db:reset
or db:drop
if I remove/delete a migration?
Upvotes: 117
Views: 175895
Reputation: 7391
Another way to delete the migration:
$ rails d migration SameMigrationNameAsUsedToGenerate
Use it before rake db:migrate
is executed because changes in database will stay forever :) - or remove changes in Database manually
Upvotes: 87
Reputation: 419
You can also run a down migration like so:
rake db:migrate:down VERSION=versionnumber
Refer to the Ruby on Rails guide on migrations for more info.
Upvotes: 10
Reputation: 81
Side Note:
Starting at rails 5.0.0
rake
has been changed to rails
So perform the following
rails db:migrate VERSION=0
Upvotes: 0
Reputation: 2051
This also works in Rails 5.
If the migration was the most recent one you can remove the database column(s) that the migration added by doing:
rake db:rollback
then remove the migration file itself by running:
rails d migration WhateverYourMigrationWasNamed.rb
Upvotes: 4
Reputation: 6512
None of these answers quite fit the problem i had as the migration i wanted to delete was missing:
I had created and run a migration in some other branch, which was then discarded. The problem is when a migration is run, rails adds the version into a schema_migrations
table in the database. So even if it isn't listed in your db structure or schema, rails looks for it.
You can reveal these orphaned migrations by running:
rails db:migrate:status
Note the versions of the missing migrations and head into the db console:
rails dbconsole
Now remove the versions from the migration table manually:
delete from schema_migrations where version='<version>';
You should now be good.
Upvotes: 11
Reputation: 277
Run below commands from app's home directory:
rake db:migrate:down VERSION="20140311142212"
(here version is the timestamp prepended by rails when migration was created. This action will revert DB changes due to this migration)
Run "rails destroy migration migration_name"
(migration_name is the one use chose while creating migration. Remove "timestamp_" from your migration file name to get it)
Upvotes: 26
Reputation: 1
I just had this same problem:
That fixed it for me
Upvotes: 0
Reputation: 141
We can use,
$ rails d migration table_name
Which will delete the migration.
Upvotes: 10
Reputation:
Look at 4.1 Rolling Back
http://guides.rubyonrails.org/migrations.html
$ rake db:rollback
Upvotes: 1
Reputation: 703
Sometimes I found myself deleting the migration file and then deleting the corresponding entry on the table schema_migrations from the database. Not pretty but it works.
Upvotes: 3
Reputation: 25260
I usually:
rake db:migrate VERSION=XXX
on all environments, to the version before the one I want to delete.rake db:migrate
again.If your application is already on production or staging, it's safer to just write another migration that destroys your table or columns.
Another great reference for migrations is: http://guides.rubyonrails.org/migrations.html
Upvotes: 154