ruby on rails - remove - Rails: Cómo eliminar una migración pendiente
rollback migration rails (4)
Actualmente estoy siguiendo el tutorial de Ruby on Rails: http://guides.rubyonrails.org/getting_started.html .
Estoy tratando de guardar datos en la base de datos. Sin embargo, cuando ejecuto: rails server
obtengo el siguiente error:
Migrations are pending. To resolve this issue, run: bin/rake db:migrate RAILS_ENV=development
He mirado los otros artículos y cuando corro:
bin/rake db:migrate
¡Tengo un rake aborted!
Despues de correr:
rake db:abort_if_pending_migrations....
Veo que:
You have 1 pending migration:
20150805200129 CreateDatabases
SQLite3::SQLException: table "databases" already exists:
y simplemente me dice que ejecute rake db: migrate para comenzar de nuevo.
Parece que ya existe. ¿Hay alguna forma de cancelar la migración pendiente?
A veces, incluso descartar una base de datos de desarrollo local no es una buena idea. Hay mejores formas de eliminar / destruir una migración específica en su aplicación Rails.
Podría usar el comando rails d migration
para destruir una migración en particular:
rails d migration MigrationName
Para deshacer los cambios correspondientes a una migración en particular, puede usar db:migrate:down
método db:migrate:down
como este:
rake db:migrate:down VERSION=XXX
A veces, las cosas pueden complicarse más y, en esas situaciones, otra cosa útil es echar un vistazo a la tabla schema_migrations
en su base de datos, que contiene todas las migraciones con su version
guardada en ella.
Puede eliminar una migración particular de esta tabla como esta:
delete from schema_migrations WHERE version = VERSION;
Si no quieres que la migración siga presente.
Es posible que la migración haya fallado a mitad de camino (por lo que creó la tabla, pero no terminó).
Solo está utilizando el entorno de desarrollo, por lo que está bien abandonar la base de datos y reconstruirla desde cero:
rake db:drop
rake db:create
rake db:migrate
Si desea revertir las migraciones incorrectas, puede eliminar toda la base de datos utilizando esto:
rake db:drop
Luego elimine el archivo de migraciones manualmente (esto no dañará la base de datos cuando se vuelva a crear, ya que las migraciones de esquema también se eliminarán).
Entonces corre
rake db:migrate
Y si hay datos para sembrar, entonces ejecuta esto también
rake db:setup
Si es como yo y mantiene su estructura de base de datos fuera de Rails, puede simplemente eliminar el archivo de migración de db / migration. Recibí el error en la pregunta del OP cuando usé el comando de generación de rieles para crear una clase de modelo, olvidando que también crea un archivo de migración.
¡No utilice este método si confía en Rails para mantener su estructura de base de datos!
Mantengo actualizado mi archivo de estructura de Rails a partir de la base de datos usando:
bundle exec rake db:structure:dump