Ejecuto "rake db: migrate" para volver a sincronizar schema.db con mi esquema de base de datos. Pero falló, diciendo que una de mis tablas ya existe. Creo que estaba intentando recrear la mesa. Si solo quiere que schema.rb se actualice para reflejar cualquier cambio que haya realizado en la base de datos independientemente de Rails, ¿qué comando debería usar si no fuera "rake db: migrate"? ¿Y cuál es la mejor fuente de documentación sobre este tipo de cosas?¿Está rake db: migra el comando correcto para volver a sincronizar schema.rb con su esquema de base de datos?
Respuesta
"rake db: migrate" intentará ejecutar todas las migraciones pendientes para su proyecto. Si solo desea volcar el esquema, haga un "rake db: schema: dump".
Pero creo que tienes un problema donde dice que la tabla ya existe. Una de sus migraciones está fallando porque la tabla que intenta agregar ya existe en su db. ¿Creaste uno a mano? ¿Has bajado una migración, pero no tienes un down escrito para eso? Deberá corregir esto antes de poder escribir futuras migraciones. Si solo es un error, y la tabla está allí y es correcta, y desea ignorar esto. Mi recomendación es hackearlo comentando la tabla de creación en la migración anómala. Luego ejecute "rake db: migrate". Entonces, pero la tabla de creación vuelve. Esto actualizará su versión de esquema.
Asegúrese de escribir errores adecuados en todas las migraciones.
Buena explicación. Gracias. – drizzle
Pruebe rake db:schema:dump
o rake db:migrate:redo
.
responder a su última pregunta respecto a la documentación:
- una guía de carriles tareas rastrillo para rieles 2.1+: http://www.tutorialspoint.com/ruby-on-rails-2.1/rails-and-rake.htm
- un buen screencast sobre las migraciones: http://railscasts.com/episodes/107-migrations-in-rails-2-1
he encontrado que de vez en cuando, cuando las cosas se ponen un poco raras, te encontrarás en una situación en la que Rails querrá ejecutar una migración que debería considerar correctamente (la tabla ya existe, etc.). Puede marcar una migración como se hace mediante la búsqueda de su número (el número de pieza al comienzo del nombre de archivo), entrando en mysql y emite una consulta de este modo:
insert into schema_migrations values('20090521153438');
(o cualquiera que sea el número de su migración es)
O si es un ser plug-in de ejecución mediante la migración migrate_plugin del Desierto:
insert into plugin_schema_migrations values('my_plugin', '005');
Gracias por el consejo. – Espen
¡Buena pena, gracias por esto! Esta es la ÚNICA solución que he visto que ** no borra todos tus datos **. Use esto si tiene datos en tablas que no desea eliminar :) – FireDragon
otra, si hacky, la táctica es comentar el cuerpo de la migración ofensiva y luego migrar. – hoff2
Trate
RAILS_ENV=development rake db:drop
antes
RAILS_ENV=development rake db:migrate
y sé feliz!
Asegurarse de que se ejecuta en el entorno de prueba o desarrollo ya que esta se reducirá la base de datos/tablas
rake db:migrate:reset
caerá todas las tablas, ejecutar todas las migraciones y crear un nuevo archivo schema.rb
.
Use rake db:schema:dump
.
$ rake -T | grep schema
rake db:schema:dump # Create a db/schema.rb file that is portable
# against any database supported by ActiveRecord
rake db:schema:dump
vuelve a crear el archivo db/schema.rb
sin ejecutar ninguna de sus migraciones de nuevo, o dejar caer las tablas (que implica la pérdida de los datos en las tablas), por lo que es la forma menos invasiva se puede tratar en primer lugar.
- 1. ¿Rake db: schema: dump recrea schema.rb desde migraciones o desde la base de datos?
- 2. ¿Por qué cambia schema.rb (a los ojos de Git) cuando ejecuta rake db: migrate?
- 3. rake db: rollback no funciona?
- 4. ¿Por qué Rake db: migrate in Rails no agrega funciones al archivo de esquema?
- 5. Problema con el rake: "la base de datos de desarrollo no está configurada"
- 6. Sincronizar una base de datos local grande con el servidor DB (MySQL)
- 7. ¿Sincronizar base de datos remota a local?
- 8. ¿Cómo funciona realmente el rake db :: migrate?
- 9. Sincronizar el esquema de dos bases de datos en MySQL
- 10. rake db: migrar y rake db: crear ambos trabajos en la base de datos de prueba, no en la base de datos de desarrollo
- 11. ¿Es una buena idea poner db/schema.rb en .gitignore list ??
- 12. heroku no actualiza el esquema de la base de datos
- 13. rake db: migrate no funciona
- 14. utilizando rake para volcar y cargar la base de datos
- 15. Cómo prevenir la prueba de Rake para llamar a la tarea db: test: prepare
- 16. Sincronizar SQLite DB en la aplicación de Android con el MySQL DB
- 17. Error al intentar crear una base de datos con Rails, rake db: create
- 18. exactamente qué hace rake db: migrate do?
- 19. Esquema de la base de datos para aplicaciones web grandes
- 20. El 'System.Web.Security.SqlMembershipProvider' requiere un esquema de base de datos compatible con la versión de esquema '1'
- 21. Base de datos de producción no creada por rake db: create command
- 22. ¿Cómo diseñaría su base de datos para permitir el esquema definido por el usuario?
- 23. ¿Cómo puedo agregar mis datos de inicialización a mi base de datos de prueba usando rake db: seed?
- 24. Cómo cambio el esquema de db a dbo
- 25. Quiero restaurar la base de datos con un esquema diferente
- 26. ¿Cuál es la diferencia entre db: test: clone, db: test: clone_structure, db: test: load y db: test: prepare?
- 27. Aplicación Can Rails y rake db: migrate ¿usa credenciales de base de datos diferentes?
- 28. RavenDB: sincronizar con SQL Server DB
- 29. ¿Cómo llegar al esquema de la base de datos de una base de datos oculta?
- 30. Rieles: rake db: prueba: preparar Vs prueba de rastrillo: Preparar
Pruebe ** 'rake db: schema: dump' ** y luego dele a su editor unos instantes para que recoja los cambios del archivo. –