我如何从耙子任务中提前退回?

我有一个rake任务,我在开始时进行一些检查,如果其中一个检查失败,我想从rake任务提前返回,我不想执行任何剩余的代码。

我认为解决scheme将是我想从代码中返回的地方,但我得到以下错误

unexpected return 

Rake任务基本上是一个块。 除了lambdas以外的块不支持返回,但是可以跳到下一个语句,使用next在rake任务中具有使用方法中的return的相同效果。

 task :foo do puts "printed" next puts "never printed" end 

或者你可以在一个方法中移动代码,并在方法中使用return。

 task :foo do do_something end def do_something puts "startd" return puts "end" end 

我更喜欢第二select。

您可以使用任务中的abort(message)来通过消息中止该任务。

如果您需要跳出多个块级别,则可以使用失败 。

例如

 task :something do [1,2,3].each do |i| ... fail "some error" if ... end end 

(请参阅https://stackoverflow.com/a/3753955/11543 。)

在这种情况下,我倾向于使用abort ,这是一个更好的select,例如:

 task :foo do something = false abort 'Failed to proceed' unless something end 

如果你的意思是退出rake任务而不会导致“rake中止!” 消息要打印,那么你可以使用“中止”或“退出”。 但是,当在救援模块中使用“中止”时,将终止该任务并打印整个错误(即使不使用–trace)。 所以“退出”是我使用的。