tesis sistemas sistema recomendacion hacer como ruby-on-rails ruby migration

ruby on rails - sistemas - Ejecutar un solo archivo de migración



sistema de recomendacion tesis (10)

¿Hay una manera fácil de ejecutar una migración única? No quiero migrar a una versión determinada, solo quiero ejecutar una específica.


A partir de los rails 5 también se pueden usar rails lugar de rake

Rieles 3 - 4

# < rails-5.0 rake db:migrate:up VERSION=20160920130051

Carriles 5

# >= rails-5.0 rake db:migrate:up VERSION=20160920130051 # or rails db:migrate:up VERSION=20160920130051


Estos son los pasos para volver a ejecutar este archivo de migración "20150927161307_create_users.rb"

  1. Ejecutar el modo de consola. (carriles c)
  2. Copia y pega la clase que está en ese archivo en 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

  3. Cree una instancia de la clase CreateUsers : c1 = CreateUsers.new

  4. Ejecute el change de método de esa instancia: c1.change

Método 1 :

rake db:migrate:up VERSION=20080906120000

Método 2:

En la consola de Rails 1. Copie y pegue 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}

¡¡Se hace!!


Parece que al menos en la última versión de Rails (5.2 en el momento de escribir este artículo) hay una forma más de filtrar las migraciones que se están ejecutando. Uno puede pasar un filtro en una variable de entorno SCOPE que luego se usaría para seleccionar archivos de migración.

Suponiendo que tiene dos archivos de migración 1_add_foos.rb y 2_add_foos.run_this_one.rb ejecución

SCOPE=run_this_one rails db:migrate:up

seleccionará y ejecutará solo 2_add_foos.run_this_one.rb . Tenga en cuenta que se ejecutarán todos los archivos de migración que coincidan con el alcance.


Si desea ejecutar una migración específica , haga

$ rake db:migrate:up VERSION=20080906120000

Si desea ejecutar migraciones varias veces , haga

# use the STEP parameter if you need to go more than one version back $ rake db:migrate:redo STEP=3

Si desea ejecutar una única migración varias veces, haga

# this is super useful $ rake db:migrate:redo VERSION=20080906120000

(Puede encontrar el número de versión en el nombre de archivo de su migración)

Editar: También puede simplemente cambiar el nombre de su archivo de migración, por ejemplo:

20151013131830_my_migration.rb -> 20151013131831_my_migration.rb

Luego migre normalmente, esto tratará la migración como una nueva (útil si desea migrar en un entorno remoto (como la estadificación) en el que tiene menos control).

Edición 2 : También puede eliminar la entrada de migración en la base de datos. P.ej:

rails_c> q = "delete from schema_migrations where version = ''20151013131830''" rails_c> ActiveRecord::Base.connection.execute(q)

rake db:migrate luego ejecutará el método up de las migraciones nuked.


Si has implementado un método de change como este:

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) o migrate(:down) en una instancia, como esto:

$ rails console >> require "db/migrate/20090408054532_add_part_number_to_products.rb" >> AddPartNumberToProducts.new.migrate(:down)


Si tienes problemas con los caminos puedes usar

require Rails.root + ''db/migrate/20090408054532_add_foos.rb''


Solo puedes ejecutar el código directamente desde el archivo ruby:

rails console >> require "db/migrate/20090408054532_add_foos.rb" >> AddFoos.up

Nota: las versiones más nuevas de los rieles pueden requerir AddFoos.new.up lugar de AddFoos.up .

Una forma alternativa (sin IRB) que se basa en el hecho de que require devuelve una matriz de nombres de clase:

script/runner ''require("db/migrate/20090408054532_add_foos.rb").first.constantize.up''

Tenga en cuenta que si hace esto, probablemente no actualizará la tabla schema_migrations , pero parece que eso es lo que quiere de todos modos.


Suponiendo que la versión bastante reciente de Rails 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.

Edición: En algún momento durante los últimos 8 años (no estoy seguro de qué versión) Rails agregó comprobaciones 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 ejecute rake db:migrate:redo VERSION=20090408054532 en rake db:migrate:redo VERSION=20090408054532 lugar.


Tenga en cuenta que en lugar de script/runner , puede que tenga que usar rails runner en nuevos entornos de rails.