rails migrations generate column ruby-on-rails ruby database migration

ruby-on-rails - migrations - rails migration default value



Rebase Rails migraciones en un proyecto de larga duraciĆ³n (3)

Además de la respuesta proporcionada (que bien indica cómo consolidar su volumen de migraciones), usted indica una inquietud por la eliminación de datos (que supongo que se agrega manualmente después de que los dispositivos llenen sus tablas); que infiere usted depende de actualizar un estado de datos inicial. Algunos proyectos requieren un refinamiento intensivo de los datos de base, la reconstrucción y la repoblación de tablas. El nuestro depende en gran medida de la ejecución repetitiva de estas operaciones, y he descubierto que si puede reducir su esquema completamente a sentencias de ejecución de SQL, sus tablas se reconstruirán mucho más rápido de lo que lo harían con la sintaxis de Ruby.

Una ayuda adicional trivial en la reconstrucción de sus tablas es dedicar una ventana de terminal separada a una sola instrucción de comando combinada:

rake db: drop db: create db: schema: load db: fixtures: load

Cada vez que necesite reconstruir y volver a llenar sus tablas, una flecha hacia arriba y una tecla de retorno devolverá ese trabajo de rutina. Si no hay conflicto en las instrucciones de ejecución de SQL, y si no tiene más migraciones para ejecutar mientras el proyecto se encuentra en estado de desarrollo, las instrucciones de SQL se ejecutarán tal vez mejor que el doble de rápido que la sintaxis de Ruby. Nuestras tablas se reconstruyen y rellenan en 20 segundos de esta manera, por ejemplo, mientras que la sintaxis de Ruby aumenta el proceso a más de 50 segundos. Si está esperando que los datos se actualicen para realizar un trabajo adicional (especialmente muchas veces), esto marca una gran diferencia en el flujo de trabajo.

En el que me refiero a "rebasar" en el diccionario, en lugar de git definition ...

Tengo un proyecto Rails grande y de larga duración que tiene aproximadamente 250 migraciones, me resulta un poco difícil manejar todas estas.

Dicho esto, necesito una base desde la cual purgar y reconstruir mi base de datos cuando se ejecutan pruebas. Así que los datos contenidos en estos son importantes.

¿Alguien tiene alguna estrategia para decir, deshacerse del esquema en un punto fijo? Archivar todas las migraciones antiguas y comenzar de nuevo con nuevas migraciones.

Obviamente, puedo usar el esquema de rake: volcado, pero realmente necesito una forma en que db: migrate cargue el esquema primero y luego comience a ejecutar el resto de las migraciones.

Me gustaría seguir usando las migraciones, ya que son muy útiles para el desarrollo, sin embargo, no hay forma de volver y editar una migración desde 2007, por lo que parece tonto mantenerla.


En general, no es necesario limpiar las migraciones antiguas. Si está ejecutando db: migrate from scratch (no hay db existente), Rails usa db / schema.rb para crear las tablas en lugar de ejecutar cada migración. De lo contrario, solo ejecuta las migraciones necesarias para actualizar desde el esquema actual al más reciente.

Si aún desea combinar las migraciones hasta un punto dado en uno solo, puede intentar:

  • migre desde cero hasta el esquema objetivo usando rake db:migrate VERSION=xxx
  • volcar el esquema usando rake db:schema:dump
  • elimine las migraciones desde el principio hasta la versión xxx y cree una única migración nueva utilizando el contenido de db / schema.rb (ponga las declaraciones create_table y add_index en el método self.up de la nueva migración).

Asegúrese de elegir uno de los números de versión de migración anterior para su nueva migración agregada; de lo contrario, Rails intentaría aplicar esa migración en su servidor de producción (lo que borraría sus datos existentes, ya que las declaraciones create_table usan: force⇒true).

De todos modos, no recomendaría hacer esto ya que Rails generalmente maneja las migraciones bien. Pero si aún lo desea, asegúrese de volver a verificar todo e intente localmente antes de arriesgarse a perder datos en su servidor de producción.


Para automatizar la fusión (o el aplastamiento) de las migraciones, puede utilizar la gema Squasher

Simplemente instale

gem install squasher

Y ejecute con una fecha, y las migraciones anteriores a esa fecha se fusionarán:

squasher 2016 # => Will merge all migration created before 2016

Más detalles en el README.