Estoy tratando de ejecutar solo una migración de un montón en mi aplicación rails. ¿Cómo puedo hacer esto? No quiero ejecutar ninguna de las migraciones antes o después. Gracias.
ruby-on-rails
database
migration
rake
Luego
fuente
fuente

STEP=nargumento paradb:migrate(dondenes el número de migraciones a plazo, al igual que lo hay paradb:rollback) - entonces usted podría hacerrake db:migrate STEP=1orake db:migrate STEP=2, etcRespuestas:
rake db:migrate:redo VERSION=xxxxxxx, pero eso ejecutará eldowny luego eluppaso. Puede hacer esto junto con comentar el paso hacia abajo temporalmente.fuente
rake -T.db:test:preparetampoco aparece en esa lista. Dios, llego tarde a la fiesta.rake db:migrate:up VERSION=my_versionposible que no haga nada , porque la tabla schema_migrations todavía dice que se ha ejecutado. En la misma situaciónrake db:migrate:redo VERSION=my_versionpuede fallar porque no se puede soltar la mesa. En este caso, comente eldownmétodo en la migración temporalmente y vuelva a ejecutarrake db:migrate:redo...de manera similar
rake db:migrate:downpara eliminar una migración específica. Puede obtener una lista de tareas de rake disponibles conrake -T.fuente
VERSIONmencionado aquí es el valor entero al comienzo de cada uno de sus archivos de migración (que es solo la marca de tiempo de cuando se creó). Por ejemploVERSION=20150720023630,.VERSIONes solo una variable de entorno, por lo que puede aparecer primero en el comando o incluso establecerse antes del comando:VERSION=1234567890 rake db:migrate:upTuve que ejecutar una única migración que cambió y necesitaba volver a ejecutarse independientemente de todas las demás migraciones. Enciende la consola y haz esto:
Más útilmente, esto podría ponerse en una tarea de rastrillo, etc.
fuente
change, ejecute en suYourMigrations.migrate(:up)lugar (¡o:downtambién!)require "#{Rails.root}/db/migrate/your_migrations.rb"rake db:migrate:up VERSION=version_noMigrará (agregará) un script de migración específico
rake db:migrate:down VERSION=version_noEliminará un script de migración específico
fuente
pruébalo.
fuente
VERSIONes solo una variable de entorno, por lo que puede aparecer primero en el comando o incluso establecerse antes del comando:VERSION=20098252345 rake db:migrateRecuerde poner las comillas alrededor de xxxx, xxxx es la marca de tiempo (o ID de migración) para su migración.
Puede comprobar las marcas de tiempo (ID de migración) de las migraciones anteriores que ha realizado utilizando
fuente
Ampliar la respuesta de korch anterior
requireno funcionó para mí, pero loloadhizo. Para ser concreto, para el archivo de migración:en la consola escribiendo
trabajó para mi.
Esto fue para ruby 1.9.3p484 (2013-11-22 revisión 43786) [x86_64-linux] y Rails 3.2.13.
fuente
Agregando mis 2 ¢ a esto porque me encontré con el mismo problema:
Si absolutamente desea ejecutar una migración nuevamente sin crear una nueva, puede hacer lo siguiente:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';Y rails "olvidará" que ejecutó la migración para 20150105181157. Ahora, cuando ejecute db: migrate, lo ejecutará de nuevo.
Sin embargo, casi siempre es una mala idea. La única instancia en la que podría tener sentido es si tiene una rama de desarrollo y aún no ha desarrollado su migración y desea agregarle algunas cosas en desarrollo. Pero incluso entonces es mejor realizar la migración en dos direcciones para que pueda retroceder correctamente y volver a intentarlo repetidamente.
fuente
Tiene que haber una forma de ejecutar la clase de migración a través de la consola. Parece que no consigo que el código de migraciones sea reconocible.
Sin embargo, como indican los comentarios, se prefiere ejecutar las migraciones en orden. Utilizar:
¿Copiar y pegar su código en la migración al script / consola?
fuente
Tengo un método de utilidad que facilita mucho el desarrollo. Me parece que me ayuda a evitar crear demasiadas migraciones; normalmente modifico las migraciones hasta que se han implementado.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
fuente
Utilizo esta técnica en el desarrollo cuando cambio una migración en una cantidad significativa, y no quiero migrar una tonelada y perder datos en el camino (especialmente cuando estoy importando datos heredados que toman mucho tiempo que No quiero tener que volver a importar).
Esto es 100% pirateado y definitivamente no recomendaría hacerlo en producción, pero funcionará:
fuente