¿Existe una manera fácil de ejecutar una única migración? No quiero migrar a una determinada versión, solo quiero ejecutar una específica.Ejecutar un solo archivo de migración
Respuesta
Usted sólo puede ejecutar el código directamente fuera del archivo de rubí:
rails console
>> require "db/migrate/20090408054532_add_foos.rb"
>> AddFoos.up
Nota: las nuevas versiones de los carriles pueden requerir AddFoos.new.up
en lugar de AddFoos.up
.
Una forma alternativa (sin IRB) que se basa en el hecho de que requiere devuelve una matriz de nombres de clase:
script/runner 'require("db/migrate/20090408054532_add_foos.rb").first.constantize.up'
Tenga en cuenta que si lo hace, es probable que no actualiza la tabla schema_migrations
, pero parece que eso es lo que quieres de todos modos.
¿Es esto algo que ejecutó una vez como una migración porque resultó ser necesario, y luego resulta ser una consulta útil que podría necesitar ejecutarse varias veces?
quizás debería refactorizar el contenido de la migración en un modelo u otro objeto, luego tener la referencia de migración en esa nueva ubicación.
Luego puede simplemente ejecutar el nuevo objeto en sus lesiones invocando ruby en la línea de comando.
Suponiendo versión bastante reciente de rieles siempre se puede ejecutar:
rake db:migrate:up VERSION=20090408054532
donde versión es la marca de tiempo en el nombre de archivo de la migración.
Editar: En algún momento durante los últimos 8 años (no estoy seguro de qué versión) Rails agregó controles que impiden que esto se ejecute si ya se ha ejecutado. Esto se indica mediante una entrada en la tabla schema_migrations
. Para volver a ejecutarlo, simplemente elimine esa fila y luego esto funcionará.
Tenga en cuenta que en lugar de script/runner
, puede que tenga que usar rails runner
en entornos de nuevos rieles.
Si desea run a specific migration, hacer
$ rake db:migrate:up VERSION=20080906120000
Si desea ejecutar migraciones multiple times, hacer
# use the STEP parameter if you need to go more than one version back
$ rake db:migrate:redo STEP=3
Si desea ejecutar un sola migración múltiples veces, hacer
# this is super useful
$ rake db:migrate:redo VERSION=20080906120000
(puede encontrar el número de versión en el nombre del archivo de migración)
Editar: También puede simplemente cambiar el nombre del archivo de migración, Ej:
20151013131830_my_migration.rb
->20151013131831_my_migration.rb
A continuación, migre normalmente, esto tratará la migración como una nueva (útil si desea migrar en un entorno remoto (como la etapa) en el que tiene menos control.
Editar 2: También puede simplemente activar la entrada de migración en la base de datos. Ej:
rails_c> q = "delete from schema_migrations where version = '20151013131830'"
rails_c> ActiveRecord::Base.connection.execute(q)
rake db:migrate
se vuelva a ejecutar el método de las migraciones nuked up
.
Tanto "arriba" como "rehacer" no funcionaron para mí, pero borrar la fila en schema_migrations fue perfecto. – cesoid
Si ha implementado un método change
así:
class AddPartNumberToProducts < ActiveRecord::Migration
def change
add_column :products, :part_number, :string
end
end
Puede crear una instancia de la migración y ejecutar migrate(:up)
migrate(:down)
o en una instancia, como esto:
$ rails console
>> require "db/migrate/20090408054532_add_part_number_to_products.rb"
>> AddPartNumberToProducts.new.migrate(:down)
Esto también se aplica incluso si está usando 'up' y' down'. –
Si tiene problemas con las rutas que puede usar
require Rails.root + 'db/migrate/20090408054532_add_foos.rb'
Método 1:
rake db:migrate:up VERSION=20080906120000
Método 2:
En Rails consola 1. Copiar la clase de migración en la consola (por ejemplo add_name_to_user.rb) 2. Luego, en la consola, escriba lo siguiente
Sharding.run_on_all_shards{AddNameToUser.up}
¡Ya está!
Estos son los pasos para ejecutar de nuevo este archivo de migración "20150927161307_create_users.rb"
- Ejecutar el modo de consola. (rails c)
Copie y pase la clase que está en ese archivo a la consola.
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.string :email t.timestamps null: false end end end end
Crear una instancia de la clase
CreateUsers
:c1 = CreateUsers.new
- ejecutar el método
change
de esa instancia:c1.change
¡Esto es realmente bueno para mí en Rails4.1.7! –
Realmente ingenioso, también funciona para mí en Rails 5. – DemitryT
A partir de rails 5
también se puede utilizar rails
en lugar de rake
Rieles 3 - 4
# < rails-5.0
rake db:migrate:up VERSION=20160920130051
rieles 5
# >= rails-5.0
rake db:migrate:up VERSION=20160920130051
# or
rails db:migrate:up VERSION=20160920130051
también adivina lo que necesitas con 'rieles db: migrate VERSION = 20160920130051' – frenesim
- 1. Rake solo una migración
- 2. ¿Cómo compilar y ejecutar un solo archivo de clase cs?
- 3. ¿Es posible ejecutar stylecop en un solo archivo en VS2010?
- 4. Cargando un dispositivo antes de una migración al sur ejecutar
- 5. Error de solo lectura al ejecutar una migración de Rails 3 con el atributo_actualización
- 6. Migrar hacia abajo con solo una migración
- 7. ¿Cómo ejecutar un archivo .awk?
- 8. Cómo ejecutar un archivo JAR
- 9. abrir automáticamente Rails generar archivo de migración en el editor
- 10. Migración de Drupal: ahora solo la página principal funciona
- 11. ¿Cómo ejecutar un solo archivo Java desde un proyecto en Eclipse?
- 12. Django sur: volver a ejecutar la primera migración
- 13. cómo ejecutar un archivo simple en heroku
- 14. Cómo ejecutar un servidor HSQLDB en modo solo memoria
- 15. ANT - Ejecutar un solo objetivo pero sin dependencias
- 16. ¿Hay un script para generar un archivo de migración SQL (postgres)?
- 17. FFT en un solo archivo de C-
- 18. ¿Cómo pago un solo archivo de CVS?
- 19. ¿Cómo elimino un archivo de solo lectura?
- 20. ¿Cómo hacer un archivo de "solo lectura"?
- 21. parche de formato para un solo archivo
- 22. Rehacer fusión de un solo archivo
- 23. Elementos de solo lectura ¿Ejecutar elementos en un WPF RichTextBox?
- 24. Comandos automáticos de Vim: ¿escribir un archivo de solo lectura?
- 25. Cómo ejecutar solo una instancia de aplicación
- 26. Ejecutar archivo .jar desde un programa Java
- 27. ejecutar un archivo .cgi en Ubuntu
- 28. cómo ejecutar un archivo .sh desde php?
- 29. ¿Cuánto demora ejecutar un archivo por lotes?
- 30. ¿Cómo ejecutar un archivo en C#?
Perfecto. Justo lo que necesitaba. – nan
A veces necesita un './' delante de la ruta requerida, y definitivamente no actualiza los schema_migrations. – Bearddo
'script/runner 'require (" db/migrate/20090408054532_add_foos.rb "). First.constantize.up'' Esto parece un buen truco. Pero 'require' ahora devuelve verdadero o falso. ¿Hay alguna solución? – Siddhant