如何在 rake 任务中捕获引发的异常
How to catch raised exception in rake task
我有一个循环遍历 CSV 文件中的行的 rake 任务,在该循环中,有一个 begin/rescue 块来捕获任何可能引发的异常。但是当我 运行 它时,它一直在说 'rake aborted!' 并且它没有进入救援块
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
预期:它应该完成循环 CSV 的所有行
实际结果:它在到达 'raise' 异常后停止说:
rake aborted!
Exception: error message here
...
Caused by:
RestClient::InternalServerError: 500 Internal Server Error
可以使用next
跳过循环错误的步骤:
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
并在您的方法中引发异常:
def method_which_doing_the_staff
stuff
...
raise SomethingException.new('hasd')
end
我通过注释掉引发异常的行解决了这个问题,因为它似乎是目前最快的解决方法。
# raise Exception.new('...')
如果有更好的方法,我仍然愿意接受其他建议。
我有一个循环遍历 CSV 文件中的行的 rake 任务,在该循环中,有一个 begin/rescue 块来捕获任何可能引发的异常。但是当我 运行 它时,它一直在说 'rake aborted!' 并且它没有进入救援块
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
预期:它应该完成循环 CSV 的所有行
实际结果:它在到达 'raise' 异常后停止说:
rake aborted!
Exception: error message here
...
Caused by:
RestClient::InternalServerError: 500 Internal Server Error
可以使用next
跳过循环错误的步骤:
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
并在您的方法中引发异常:
def method_which_doing_the_staff
stuff
...
raise SomethingException.new('hasd')
end
我通过注释掉引发异常的行解决了这个问题,因为它似乎是目前最快的解决方法。
# raise Exception.new('...')
如果有更好的方法,我仍然愿意接受其他建议。