Как явно провалить задачу в рубиновых граблях? - PullRequest
46 голосов
/ 20 сентября 2010

Допустим, у меня есть такой 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 не выполнена, и она должна прерваться (надеюсь, что появится значимое сообщение - например, какая задача завершилась неудачей) - единственное, о чем я могу думать сейчас, это вызвать исключение, нопросто не кажется правильным.

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

Ответы [ 2 ]

58 голосов
/ 20 сентября 2010

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

16 голосов
/ 20 апреля 2017

Вы можете использовать abort("message") для изящного сбоя рейка.

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

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

Подробнее см. Kernel # abort .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...