Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: How to delete a pending migration

Tags:

I'm currently following the ruby on rails tutorial: http://guides.rubyonrails.org/getting_started.html.

I am trying to save data into the database. However, when I run: rails server I get the following error:

Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development 

I've looked at the other articles and when I run:

bin/rake db:migrate  

I get a rake aborted!

After running:

rake db:abort_if_pending_migrations.... 

I see that:

You have 1 pending migration: 20150805200129 CreateDatabases  SQLite3::SQLException: table "databases" already exists: 

and it just tells me to run rake db:migrate to start again.

It seems that it already exists. Is there a way to cancel the pending migration?

like image 378
Leslie Tate Avatar asked Aug 05 '15 21:08

Leslie Tate


People also ask

How do I view pending migrations in rails?

If you need a bash one-liner to determine whether to run a migration or not (e.g., only migrate in a Heroku release phase command when there is a pending migration), this works: (rails db:migrate:status | grep "^\s*down") && rails db:migrate || echo "No pending migrations found."


2 Answers

Sometimes, even dropping a local development database is not a good idea. There are better ways to delete/destroy a specific migration in your Rails application.

You could use rails d migration command to destroy a particular migration:

rails d migration MigrationName 

To undo the changes corresponding to a particular migration, you can use db:migrate:down method like this:

rake db:migrate:down VERSION=XXX 

Sometimes, things could get more messy and in those situation another handy thing is to take a look at the schema_migrations table in your database which has all the migrations with their version saved in it.

You can delete a particular migration from this table like this:

delete from schema_migrations WHERE version = VERSION; 

if you don't want that migration to be present anymore.

like image 153
K M Rakibul Islam Avatar answered Oct 04 '22 01:10

K M Rakibul Islam


You migration may have failed midway (so it created the table, but didn't finish).

You are just using development environment, so it's okay to just drop database and rebuild it from scratch:

rake db:drop rake db:create rake db:migrate 
like image 37
EugZol Avatar answered Oct 04 '22 00:10

EugZol