Как явно провалить задачу в ruby ​​rake?

Допустим, у меня есть такой rakefile:

file 'file1' => some_dependencies do
  sh 'external tool I do not have control over, which sometimes fail to create the file'
  ???
end

task :default => 'file1' do
  puts "everything's OK"
end

Теперь, если я ничего не помещаю вместо ???, я получаю сообщение OK, даже если внешнему инструменту не удается сгенерировать файл. Каков правильный способ сообщить rake, что задача «file1» не удалась и ее следует прервать (надеюсь, представив значимое сообщение — например, какая задача не удалась) — единственное, о чем я могу думать сейчас, это вызвать там исключение, но это просто не кажется правильным.

P.S. Инструмент всегда возвращает 0 в качестве кода выхода.


person dahpgjgamgan    schedule 20.09.2010    source источник


Ответы (2)


Используйте метод raise или fail, как и для любого другого скрипта Ruby (fail — это псевдоним для raise). Этот метод принимает строку или исключение в качестве аргумента, который используется в качестве сообщения об ошибке, отображаемого при завершении сценария. Это также приведет к тому, что сценарий вернет вызывающей оболочке значение 1. Он задокументирован здесь и в других местах.

person Richard Cook    schedule 20.09.2010
comment
fail — это просто псевдоним для raise - person Stefan; 24.07.2013
comment
Вы правы. Обновлен мой ответ, чтобы указать это. - person Richard Cook; 28.07.2013
comment
@ Дэн Тененбаум: Спасибо. Заменена на рабочую ссылку. - person Richard Cook; 14.09.2014

Вы можете использовать abort("message"), чтобы изящно провалить задачу rake.

Он выведет message на стандартный вывод и выйдет с кодом 1.

Код выхода 1 — это ошибка в Unix-подобных системах.

Дополнительные сведения см. в разделе Kernel#abort.

person Senid    schedule 20.04.2017