Respuestas:
rake db:migrate:redo VERSION=xxxxxxx
, pero eso ejecutará el down
y luego el up
paso. Puede hacer esto junto con comentar el paso hacia abajo temporalmente.
rake -T
.
db:test:prepare
tampoco aparece en esa lista. Dios, llego tarde a la fiesta.
rake db:migrate:up VERSION=my_version
posible que no haga nada , porque la tabla schema_migrations todavía dice que se ha ejecutado. En la misma situación rake db:migrate:redo VERSION=my_version
puede fallar porque no se puede soltar la mesa. En este caso, comente el down
método en la migración temporalmente y vuelva a ejecutarrake db:migrate:redo...
rake db:migrate:up VERSION=1234567890
de manera similar rake db:migrate:down
para eliminar una migración específica. Puede obtener una lista de tareas de rake disponibles con rake -T
.
VERSION
mencionado 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
,.
VERSION
es 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:up
Tuve 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:
>> require 'db/migrate/your_migrations.rb'
=> ["YourMigrations"]
>> YourMigrations.up
=> etc... as the migration runs
>> YourMigration.down
Más útilmente, esto podría ponerse en una tarea de rastrillo, etc.
change
, ejecute en su YourMigrations.migrate(:up)
lugar (¡o :down
también!)
require "#{Rails.root}/db/migrate/your_migrations.rb"
rake db:migrate VERSION=20098252345
pruébalo.
VERSION
es solo una variable de entorno, por lo que puede aparecer primero en el comando o incluso establecerse antes del comando:VERSION=20098252345 rake db:migrate
rake db:migrate:redo version='xxxx'
Recuerde 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
rake db:migrate:status
Ampliar la respuesta de korch anterior require
no funcionó para mí, pero lo load
hizo. Para ser concreto, 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 escribiendo
> load 'db/migrate/30130925110821_change_min_quantity_to_races.rb'
> ChangeMinQuantityToRaces.new.change
trabajó para mi.
> Race.new.min_quantity # => 0
Esto fue para ruby 1.9.3p484 (2013-11-22 revisión 43786) [x86_64-linux] y Rails 3.2.13.
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.
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:
rake db:migrate VERSION=##########
¿Copiar y pegar su código en la migración al script / consola?
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/
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á:
STEP=n
argumento paradb:migrate
(donden
es el número de migraciones a plazo, al igual que lo hay paradb:rollback
) - entonces usted podría hacerrake db:migrate STEP=1
orake db:migrate STEP=2
, etc