2011-09-02 25 views

Respuesta

58

Esto le permitirá migrar sin volver a cargar todo el entorno rieles:

ActiveRecord::Migrator.migrate "db/migrate" 

y rollback:

# 3 is the number of migration to rollback, optional, defaults to 1 
ActiveRecord::Migrator.rollback "db/migrate", 3 
+2

Tenga en cuenta que si usa Mongoid, es lo mismo: 'Mongoid :: Migrator.migrate" db/migrate "' –

+0

Esto es perfecto para agregar a su test_helper.rb en las aplicaciones de Rails –

+0

Error recibido, bash: ActiveRecord :: Migrator.migrate: comando no encontrado ... usando Rails 2.3.18, ruby ​​1.9.3p551, Ahora se ejecuta después de ejecutar el comando dentro de la consola de rails. –

1

Puede utilizar el x [comando]%

%x[rake db:migrate] 
+1

Eso frustra el propósito de no tener que esperar a que los rieles carga. – rafamvc

+0

@rafamvc sí estuvo de acuerdo! Es por eso que creo que la respuesta de Benoit es mejor :) – dexter

0

Creé un método en mi archivo .irbrc que ejecuta migraciones y luego vuelve a cargar la consola:

def migrate 
    if defined? Rails::Console # turn off info logging for Rails 3 
    old_log_level = ActiveRecord::Base.logger.try(:sev_threshold) 
    ActiveRecord::Base.logger.sev_threshold = Logger::WARN 
    end 
    reload! && migations_ran = true if ActiveRecord::Migrator.migrate(Rails.root.join("db/migrate")).any? 
    ActiveRecord::Base.logger.sev_threshold = old_log_level if defined? old_log_level 
    migations_ran ||= nil # useful exit status 
end 

Ver todo el archivo aquí: https://gist.github.com/imme5150/6548368

55

En la consola:

ActiveRecord::Migration.remove_column :table_name, :column_name 
+0

Perfecto para ejecutar comandos de migraciones. Gracias. –

+1

Después de hacer esto, necesita actualizar manualmente su esquema. –

+0

@WestonGanger ¿cómo? – nruth

10

Otra forma en que me parece más ordenado que acaba de ejecutar algún comando de migración de la consola es la siguiente:

ActiveRecord::Schema.define do 
    create_table :foo do |t| 
    t.string :bar 
    t.timestamps 
    end 
end 

Esto tiene la ventaja de que el contenido dentro del bloque es compatible con solo copiar y pegar contenido aleatorio de un archivo de migración real/schema.rb.

Cuestiones relacionadas