I just loaded a DB dump, and not only it created tables, and loaded the data in those tables, it also up'ed a lot of migrations.
And after running the remaining migrations, running rake db:migrate:status tells me that the status of each migration is UP, but the migrations have not actually done what they are supposed to do.
For example, I have a migration that creates a table called notes. It has been up'ed, and the tables notes doesn't exist. So I had to redo this migration, but commenting out the code in self.down method.
My question is: How can a migration be in UP status even though the table it tries to create, hasn't been created in the database. Or I guess, the db dumb that I loaded earlier, has populated schema_migrations table in such a way that Rails considers mostly migrations are up, but actually they aren't.
Now, do I need manually need to rake db:migrate:redo VERSION=xxxxxxx each migration, or there is a better solution?
Rails adds a table to your schema named schema_migrations which stores the timestamp of each migration in a single column. It doesn't show up in the schema.rb, but Rails will compare the timestamps in db/migrate and the timestamp of schema.rb to the values of the schema_migrations table to determine which migrations have run.

Rails uses Rack middleware ActiveRecord::Migration::CheckPending to do that.
You can view all Rack middlewares Rails is using by executing rack middleware in your console.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With