Подтвердить что ты не робот

Выполнять задачу Rake изнутри миграции?

У меня есть задача Rake, которая загружает данные конфигурации в БД из файла, есть ли правильный способ ruby ​​/rails вызвать его при миграции?

Моя цель - синхронизировать конфигурационные файлы моей команды, , без необходимости транслировать затем выполнение задачи 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 Как я это делаю сейчас, и работает:

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

И это предложение от @Ryan Bigg, и это исключение:

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'

Где это пошло не так?

4b9b3361

Ответ 1

Да, есть способ сделать это:

Rake::Task['your_task'].invoke

Обновление

Не кладите грабли внутри скобок, просто имя задачи. Вы должны установить переменную ENV при ее запуске:

В консоли

FILE=somefile.text rake db:sistema:load_data

Вызов по отдельности

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

Это будет доступно в ваших задачах как ENV['file']

Ответ 2

Обратите внимание, что если вы вызываете задачу Rake с помощью "system", вам необходимо проверить статус процесса после этого и вызвать исключение, если задача Rake завершилась неудачно. В противном случае миграция будет успешной, даже если задача Rake завершится с ошибкой.

Вы можете проверить статус процесса следующим образом:

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

Вызов задачи рейка является более приятным вариантом - это приведет к сбою миграции, если задача Rake завершится с ошибкой.