У мене є завдання 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 не вдасться.