2011-09-02 19 views

risposta

58

Questo vi permetterà di migrare senza ricaricare tutto l'ambiente rotaie:

ActiveRecord::Migrator.migrate "db/migrate" 

e rollback:

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

Si noti che se si sta utilizzando Mongoid, è lo stesso: 'Mongoid :: Migrator.migrate "db/migrare"' –

+0

Questo è perfetto per aggiungere alla vostra test_helper.rb in Rails apps –

+0

errore ricevuto, bash: ActiveRecord :: Migrator.migrate: comando non trovato ... utilizzando Rails 2.3.18, ruby ​​1.9.3p551, Ora eseguito dopo aver eseguito il comando all'interno della console di rails. –

1

È possibile utilizzare la x [comando]%

%x[rake db:migrate] 
+1

Che sconfigge lo scopo di non dover aspettare i binari per caricare. – rafamvc

+0

@rafamvc si è d'accordo! Ecco perché penso che la risposta di Benoit sia migliore :) – dexter

0

Ho creato un metodo nel mio file .irbrc che esegue le migrazioni, quindi ricarica la console:

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 

Vedi l'intero file qui: https://gist.github.com/imme5150/6548368

55

Nella console:

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

Perfetto per eseguire i comandi di migrazione. Grazie. –

+1

Dopo aver effettuato questa operazione, è necessario aggiornare manualmente lo schema. –

+0

@WestonGanger come? – nruth

10

Un altro modo che trovo più elegante basta eseguire qualche comando di migrazione dalla console è questo:

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

Questo ha il vantaggio che il contenuto all'interno del blocco è compatibile con solo copia e incolla contenuti casuali da un file di migrazione reale/schema.rb.

Problemi correlati