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 ni después de ella. Gracias.Rake solo una migración
Respuesta
rake db:migrate:redo VERSION=xxxxxxx
, pero eso ejecutará el down
y luego el paso up
. Podrías hacer esto junto con comentar temporalmente el paso hacia abajo.
Hmm, http://blog.stonean.com/2007/12/18/rake-dbmigrateredo/, :: rehacer no parece tomar un argumento VERSIÓN. –
Funciona, lo probé. Tenga en cuenta que el artículo es de DOS MIL Y SIETE. Rails cambia mucho durante ese tiempo. –
Entonces, ¿por qué Stackoverflow debería mostrar información desactualizada? Si ahora ejecuta 'rake -T' no hay ninguna tarea llamada' db: migrate: redo' –
rake db:migrate VERSION=20098252345
dale una oportunidad.
Creo que esto ejecutará cualquier migración hasta la que haya especificado. –
cerrar, pero eso también ejecuta cualquier migración antes de la migración específica. – Anon
No creo que deba/desee ejecutar solo una migración sin considerar las anteriores. Una migración es una representación de la estructura de las bases de datos en lo que se refiere al código en un punto dado en el tiempo, y por lo tanto las migraciones antes de que sean necesarias. Si solo desea ejecutar _una_ migración, es probable que no haya escrito las operaciones correctas arriba/abajo para mantener las migraciones funcionales ... es una mala costumbre escribir solo sus migraciones ascendentes. –
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. Use:
rake db:migrate VERSION=##########
Copie y pegue su código en la migración a la secuencia de comandos/consola?
rake db:migrate:up VERSION=1234567890
de manera similar rake db:migrate:down
para tomar una migración específica hacia abajo. Puede obtener una lista de tareas de rake disponibles con rake -T
.
La 'VERSIÓN 'mencionada 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 ejemplo, 'VERSION = 20150720023630'. –
Las versiones se muestran muy bien con rake db: migrate: estado – jpgeek
He tenido que ejecutar una única migración que cambió y debe volver a ejecutarse independientemente de todas las demás migraciones. Enciende la consola y hacer esto:
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
Más útil esta podría ser puesto en una tarea rake etc.
Esto funcionó de maravilla. También puede copiar y pegar el código de la migración en la consola para definir la clase (y esto permite la manipulación manual si es necesario, si acaba de cometer un error en Dev, por ejemplo). Si definió una migración reversible con 'change', ejecute' YourMigrations.migrate (: up) 'en su lugar (o': down' también!) – trisweb
, puede que tenga que 'require' # {Rails.root}/db/migrate/your_migrations.rb "' – s2t2
Tengo un método de utilidad que hace que este muy fácil en el desarrollo. Considero que me ayuda a evitar la creación de demasiadas migraciones, normalmente modifico las migraciones hasta que se hayan implementado.
http://fullware.net/index.php/2011/05/26/easily-load-rails-migrations-for-console-execution/
rake db:migrate:up VERSION=version_no
migrará (ADD) script de migración específica
rake db:migrate:down VERSION=version_no
eliminará script de migración específica
Ampliando la respuesta por Korch anterior, require
hicieron no funciona para mí, pero load
hizo. Para ser concretos, para el archivo de migración:
class ChangeMinQuantityToRaces < ActiveRecord::Migration
def change
change_column :races, :min_quantity, :integer, :default => 0
end
end
en la consola tecleando
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
trabajó para mí.
> Race.new.min_quantity # => 0
Esto era para rubí 1.9.3p484 (22/11/2013 revisión 43786) [x86_64-linux] y rieles 3.2.13.
¡Brillante, esto funciona sin problemas! – Loed
rake db:migrate:redo version='xxxx'
Recuerde poner las comillas alrededor de xxxx, xxxx es la marca de tiempo (o migración ID) para su migración.
Es posible comprobar las marcas de tiempo (Migración ID) para las migraciones anteriores que has hecho mediante el uso de
rake db:migrate:status
Adición de mis 2 ¢ a esto porque me encontré con este mismo tema:
Si absolutamente desee ejecutar una migración de nuevo sin crear uno nuevo, puede hacer lo siguiente:
rails dbconsole -p devdb=# delete from public.schema_migrations where version = '20150105181157';
y los carriles se " olvide "que ejecutó la migración para 20150105181157. Ahora cuando ejecuta db: migrate lo ejecutará nuevamente.
Sin embargo, esto siempre es una mala idea. La única instancia en la que podría tener sentido es si tiene una rama de desarrollo y todavía no ha desarrollado su migración y desea agregarle algunas cosas en el desarrollo. Pero incluso así, es mejor realizar su migración en dos direcciones para que pueda retroceder adecuadamente y volver a intentarlo repetidamente.
Uso esta técnica en desarrollo cuando cambio una migración en una cantidad significativa, y no quiero migrar mucho y perder datos en el camino (especialmente cuando estoy importando datos heredados que toman un largo tiempo que no quiero tener que volver a importar de nuevo).
Esto es 100% hacker y definitivamente no recomendaría hacer esto en la producción, pero lo hará el truco:
-
migración
- movimiento que desea volver a ejecutar fuera de su directorio a un lugar temporal
- Generar otra migración con el mismo nombre
- Copia/pega el siguiente código de migración original en el archivo de migración recién generado
- Ejecutar la nueva migración
- Eliminar la nueva ge archivo de migración nerated
- Editar sus migraciones de esquema para eliminar el valor más reciente
- restaurar el antiguo archivo de migración
- 1. Migrar hacia abajo con solo una migración
- 2. rake db: migrate no detecta nueva migración?
- 3. ¿Ejecuta una tarea de Rake desde la migración?
- 4. La relación ya existe durante la migración de rake
- 5. Cómo deshacer un solo paso usando rake db: migrate
- 6. Ejecutar un solo archivo de migración
- 7. Recuperación de una migración fallida de Rails
- 8. Error de solo lectura al ejecutar una migración de Rails 3 con el atributo_actualización
- 9. Ejecutar el inicializador solo para las tareas de Rake
- 10. ¿Por qué una tarea de Rake en un ciclo se ejecuta solo una vez?
- 11. ya inicializada constante RUBY: heroku rake db: los registros de migración muestran 1.9.2 y 1.9.1
- 12. exactamente qué hace rake db: migrate do?
- 13. rake db: la migración no funciona en la construcción de travis-ci
- 14. Migración de Drupal: ahora solo la página principal funciona
- 15. Rieles: la forma de revertir una migración fallida
- 16. ¿Usa el rake ejecutivo de bundle o simplemente rake?
- 17. Agregar una columna a una tabla existente en una migración de Rails
- 18. rake db: rollback no funciona?
- 19. Adición de varias columnas en una migración
- 20. rake db: migrate no funciona
- 21. reintentar una ruta migratoria fallado la migración
- 22. Omitir validaciones durante una migración solo de datos para corregir errores de validación
- 23. tarea de rake multiproceso
- 24. Rieles creando una tabla sin migración
- 25. ¿Qué hace una migración de datos del Sur en comparación con una migración de esquema?
- 26. Ejecutando heroku rake db: migrar de una compilación de Jenkins falla
- 27. Rake para truncar todas las tablas en Rails 3
- 28. ¿Cómo se saltea las migraciones fallidas? (rake db: migrate)
- 29. Usando rake db: migrar directamente, vainilla SQL
- 30. Rieles: ¿es malo tener una migración irreversible?
Esta sería una práctica función de rieles: añadir un 'n' PASO = argumento a' db: migrate '(donde' n' es el número de migraciones para ejecutar, al igual que para 'db: rollback') - entonces podría hacer' rake db: migrate STEP = 1' o 'rake db: migrate STEP = 2', etc. – user664833