mysql - Rails migration appears completed, but rake still shows migration as pending -
i ran simple rails migration on large mysql2 db add column table:
class addmiddlenametoperson < activerecord::migration[5.0] def change add_column :person, :middle_name, :string end end
i disconnected server running rails app during migration. reconnected , checked migration status bundle exec rake db:migrate:status
, showed down:
down 20170424182410 add middle name person
i assume still running in background. left time, , using rails console verified person.middle_name accessible on objects. however, db:migrate:status
still shows migration down, , if try run db:migrate
again error:
mysql2::error: duplicate column name 'middle_name'
so seems new column in database, , accessible through activerecord, rake db:migrate:status
finds migration down
, rake db:migrate
attempts re-run it, unsuccessfully.
if production database (or other database important data) do not rake db:reset
drop database , you'll lose everything; don't db:migrate:down
drop middle_name
column , you'll lose whatever middle names have.
first backup of database or @ least table you're working with.
second, connect database mysql
cli tool , describe people;
. information in question suggests see middle_name
column in there doesn't hurt make sure you're connecting right database. if middle_name
isn't there you're connecting wrong database somewhere, if there have migration issue clean up.
you database connection dropped before migration finished. migrations work in sequence:
- run migration update database.
- record migration's version number in
schema_migrations
table. - regenerate
db/schema.rb
ordb/structure.sql
.
if 1 completes connection lost 2 never happens migration have run rails won't know it.
if no other environments need migration can delete migration , rake db:schema:dump
or rake db:structure:dump
fresh schema.rb
or structure.sql
. migrations temporary bits of code b deleting them after they've been run everywhere fine (and recommended), matters long term database's structure (which in db/schema.rb
or db/structure.sql
).
if other environments need run migration can manually patch schema_migrations
table; connect database mysql
cli tool , insert schema_migrations (version) values ('20170424182410');
. rails know migration run , future rake db:migrate
calls happy. you'd want refresh schema.rb
(with rake db:schema:dump
) or structure.sql
(with rake db:structure:dump
).
you have db/schema.rb
file tracking database's structure (including version numbers of migrations have been run). if you'd use rake db:schema:dump
regenerate it. if have db/structure.sql
you'd use rake db:structure:dump
.
Comments
Post a Comment