Kok A.
Kok A.

Reputation: 177

How to catch raised exception in rake task

I have a rake task that loops through rows in CSV file, and inside that loop, there's a begin/rescue block to catch any possible raised exception. But when I run it, it keeps on saying 'rake aborted!' and it is not entering the rescue block

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      # call to mymethod
    rescue => ex
      puts "#{ex} error executing task"
    end
  end
end
...
def mymethod(...)
  ...
  begin
    response = RestClient.post(...)
  rescue => ex
    raise Exception.new('...')
  end
end

Expected: It should finish looping all the rows of the CSV

Actual result: It stops after reaching the 'raise' exception saying that:

rake aborted!

Exception: error message here

...

Caused by:

RestClient::InternalServerError: 500 Internal Server Error

Upvotes: 3

Views: 1713

Answers (2)

Kok A.
Kok A.

Reputation: 177

I solved this issue by just commenting out the line that is raising an exception because it seems like it the quickest fix for now.

# raise Exception.new('...')

I'm still open to other suggestions if there are any better ways to do it.

Upvotes: 0

barmic
barmic

Reputation: 1097

You can use next to skip the faulty step of loop:

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      method_which_doing_the_staff
    rescue SomethingException
      next
    end
  end
end

And raise the exception inside your method:

def method_which_doing_the_staff
  stuff
  ...
  raise SomethingException.new('hasd')
end

Upvotes: 1

Related Questions