2010-11-11 19 views
1

Je souhaite appeler une tâche thor auprès d'une migration. Avec râteau Je peux écrireExécution de la tâche Thor à partir de la migration

def self.up 
    Rake::Task["db:rollback"].invoke 
end 

Mais comment puis-je faire avec thor? (La commande thor est « thor db: rollback ») (thor db:rollback est pas une option, je veux donc voir la sortie et le script doit abandonner sur les erreurs)

MISE À JOUR: La migration est appelée depuis la Thorfile

Il ressemble à ceci:

require 'active_record' 
class Db < Thor 
    desc "migrate", "description ..." 
    def migrate 
    ActiveRecord::Migrator.migrate(MIGRATIONS_PATH) 
    end 
end 

Répondre

2

en supposant que db:rollback fait référence à la tâche rollback de la classe Db, alors vous pouvez le faire:

script = Db.new 
script.invoke(:rollback) 

Vous pouvez en savoir plus dans les docs: http://rdoc.info/github/wycats/thor/master/Thor/Base/ClassMethods#start-instance_method

+0

Lorsque la migration est exécutée une erreur est soulevée par DB.new. "constante non initialisée CreateUsers :: Db". Il semble qu'il essaie de trouver la classe Db thor dans la migration elle-même. (J'ai mis à jour ma question) – ipsum

+1

Assurez-vous que la classe est chargée, et assurez-vous que vous utilisez la bonne capitalisation. 'Db' n'est pas la même chose que' DB', et vice versa. Ma réponse était pour le cas général de la façon d'invoquer les tâches de Thor, pas votre cas spécifique, alors assurez-vous que vous avez les bons noms et que la classe que vous voulez utiliser est chargée. – Theo