Search code examples
rubyrake

How do I return early from a rake task?


I have a rake task where I do some checks at the beginning, if one of the checks fails I would like to return early from the rake task, I don't want to execute any of the remaining code.

I thought the solution would be to place a return where I wanted to return from the code but I get the following error

unexpected return

Solution

  • A Rake task is basically a block. A block, except lambdas, doesn't support return but you can skip to the next statement using next which in a rake task has the same effect of using return in a method.

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

    Or you can move the code in a method and use return in the method.

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

    I prefer the second choice.