DiveInto
DiveInto

Reputation: 2266

seems that rails is replay a migration

when I new a migration and run it,error occurred:

$ rake db:migrate
== CreateEReadings: migrating ================================================
-- create_table(:e_readings) rake aborted! An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "e_readings" already exists

while this e_readings is the last table I created using migration.

The migration file name is :20120508145115_create_e_readings.rb

and the version in db/schema.rb is :

:version => 20120508145115

Seems that rails forget that I already have run this migration and try to re-play it, so error occurred,but why is this happening and how can I solve this?

Upvotes: 1

Views: 282

Answers (3)

Theo Scholiadis
Theo Scholiadis

Reputation: 2396

I agree with both Beerlington and Andy. If it's a development environment, try the following in the terminal:

rake db:drop
rake db:create
rake db:migrate

That will destroy your database, recreate it and run all your migrations.

The other thing you could try is to rollback using rake db:rollback until you see that this migration (or the one before it) has been rolled back, and then run rake db:migrate to run from that point till your latest point again. rake db:rollback rolls back one migration file at a time.

I'd go with the drop and recreate, though, just to make sure nothing funny has remained.

Hope this helps.

Upvotes: 1

Andrew
Andrew

Reputation: 698

I think beerlington is right. Your migration probably failed the first time you ran it. In addition to his suggestions you could also try manually dropping the table from the database and re-running the migration to see what went wrong the first time

Upvotes: 1

Peter Brown
Peter Brown

Reputation: 51697

It seems like you may have run it before and it failed after creating the table for some reason. If you're sure it has already run, you can manually add a record to the "schema_migrations" table with the 20120508145115 as the version.

If this is just a dev environment and you don't mind blowing it away, you could also run rake db:reset and that would drop, create, load the schema and reseed it.

Upvotes: 3

Related Questions