/ / Виконати завдання Rake зсередини міграції? - рубін на рейки, рубін, міграція

Виконати завдання Rake з міграції? - рубін на рейках, рубій, міграція

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

Моя мета - синхронізувати конфігурації БД моєї команди, без необхідності трансляції, щоб потім виконати завдання лалала

  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"

Де це пішло не так?

Відповіді:

74 для відповіді № 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"]


9 для відповіді № 2

Зауважте, що якщо ви викликаєте завдання Rake за допомогою"system", потрібно перевірити стан процесу після цього і створити виняток, якщо завдання Rake не вдалося. Інакше міграція буде успішною, навіть якщо завдання Rake не вдасться.

Ви можете перевірити такий стан процесу:

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

Викликати завдання граблі - це приємніший варіант - це призведе до збою міграції, якщо завдання Rake не вдасться.