从迁移中执行Rake任务?

我有一个Rake任务,从文件加载configuration数据到数据库中,是否有正确的ruby / rails的方式来调用它的迁移?

我的目标是同步我的团队数据库configuration, 而不必广播,然后运行任务 lalala

def self.up change_table :fis_situacao_fiscal do |t| t.remove :mostrar_endereco t.rename :serie, :modelo end Faturamento::Cfop.destroy_all() #perform rake here ! end 

更新我现在如何做,并工作:

 system('rake sistema:load_data file=faturamento/cfop') 

这是@Ryan Bigg的build议,例外:

 Rake::Task['rake sistema:load_data file=faturamento/cfop'].invoke() 

 == AlterSituacaoFiscalModeloEndereco: migrating ==================== -- change_table(:fis_situacao_fiscal) -> 0.0014s rake aborted! An error has occurred, this and all later migrations canceled: Don't know how to build task 'rake sistema:load_data file=faturamento/cfop' 

哪里出错了?

是的,有一种方法可以做到这一点:

 Rake::Task['your_task'].invoke 

更新

不要把括号内的耙子,只是任务的名称 。 运行时应该设置一个ENVvariables:

在控制台中

 FILE=somefile.text rake db:sistema:load_data 

单独调用它

 FILE=somefile.text rake some:other:task:that:calls:it 

这将作为ENV['file']在您的任务中可用

请注意,如果使用'system'调用Rake任务,则需要事后检查进程状态,并在Rake任务失败时引发exception。 否则,即使Rake任务失败,迁移也将成功。

你可以像这样检查进程状态:

 if !($?.success?) raise "Rake task failed" end 

调用rake任务是一个更好的select – 如果Rake任务失败,将导致迁移失败。