views:

156

answers:

1

I have a Rake task that loads configuration data into the DB from a file, is there a correct ruby/rails way to call it on a migration up?

My objective is to sync my team DB configs, without have to broadcast then to run the task 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

UPDATE How I do now, and works:

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

And this is the suggestion from @Ryan Bigg, and it's exception:

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'

Where it went wrong?

+3  A: 

Yes there's a way to do that:

Rake::Task['your_task'].invoke

Update

Do not put rake inside the brackets, just the name of the task. You should set an ENV variable when running this:

In the console

FILE=somefile.text rake db:sistema:load_data

Calling it separately

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

This will be available in your tasks as ENV['file']

Ryan Bigg
I made an update with your answer, glad if you could help some more
Fabiano PS
Try it without "rake"..
ryeguy